Update dependecies (#19635)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
32fd4d7f16
Коммит
a22bc8fd96
22
go.mod
22
go.mod
@@ -12,10 +12,10 @@ require (
|
|||||||
github.com/andybalholm/brotli v1.0.4 // indirect
|
github.com/andybalholm/brotli v1.0.4 // indirect
|
||||||
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
|
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
||||||
github.com/aws/aws-sdk-go v1.42.49
|
github.com/aws/aws-sdk-go v1.43.6
|
||||||
github.com/bits-and-blooms/bitset v1.2.1 // indirect
|
github.com/bits-and-blooms/bitset v1.2.1 // indirect
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/blevesearch/bleve/v2 v2.3.0
|
github.com/blevesearch/bleve/v2 v2.3.1
|
||||||
github.com/cespare/xxhash/v2 v2.1.2
|
github.com/cespare/xxhash/v2 v2.1.2
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
||||||
@@ -34,11 +34,11 @@ require (
|
|||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/gomodule/redigo v2.0.0+incompatible // indirect
|
github.com/gomodule/redigo v2.0.0+incompatible // indirect
|
||||||
github.com/google/btree v1.0.1 // indirect
|
github.com/google/btree v1.0.1 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20220221023154-0b2280d3ff96 // indirect
|
||||||
github.com/gorilla/handlers v1.5.1
|
github.com/gorilla/handlers v1.5.1
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/gorilla/schema v1.2.0
|
github.com/gorilla/schema v1.2.0
|
||||||
github.com/gorilla/websocket v1.4.2
|
github.com/gorilla/websocket v1.5.0
|
||||||
github.com/graph-gophers/graphql-go v1.3.0
|
github.com/graph-gophers/graphql-go v1.3.0
|
||||||
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c
|
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c
|
||||||
github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b
|
github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b
|
||||||
@@ -53,7 +53,7 @@ require (
|
|||||||
github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba
|
github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba
|
||||||
github.com/jmoiron/sqlx v1.3.4
|
github.com/jmoiron/sqlx v1.3.4
|
||||||
github.com/jonboulle/clockwork v0.2.2
|
github.com/jonboulle/clockwork v0.2.2
|
||||||
github.com/klauspost/compress v1.14.2 // indirect
|
github.com/klauspost/compress v1.14.4 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.0.11 // indirect
|
github.com/klauspost/cpuid/v2 v2.0.11 // indirect
|
||||||
github.com/ledongthuc/pdf v0.0.0-20210621053716-e28cb8259002
|
github.com/ledongthuc/pdf v0.0.0-20210621053716-e28cb8259002
|
||||||
github.com/lib/pq v1.10.4
|
github.com/lib/pq v1.10.4
|
||||||
@@ -71,7 +71,7 @@ require (
|
|||||||
github.com/microcosm-cc/bluemonday v1.0.18
|
github.com/microcosm-cc/bluemonday v1.0.18
|
||||||
github.com/miekg/dns v1.1.46 // indirect
|
github.com/miekg/dns v1.1.46 // indirect
|
||||||
github.com/minio/md5-simd v1.1.2 // indirect
|
github.com/minio/md5-simd v1.1.2 // indirect
|
||||||
github.com/minio/minio-go/v7 v7.0.21
|
github.com/minio/minio-go/v7 v7.0.23
|
||||||
github.com/minio/sha256-simd v1.0.0 // indirect
|
github.com/minio/sha256-simd v1.0.0 // indirect
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
||||||
github.com/nwaples/rardecode v1.1.2 // indirect
|
github.com/nwaples/rardecode v1.1.2 // indirect
|
||||||
@@ -108,19 +108,19 @@ require (
|
|||||||
github.com/vmihailenco/msgpack/v5 v5.3.5
|
github.com/vmihailenco/msgpack/v5 v5.3.5
|
||||||
github.com/wiggin77/merror v1.0.3
|
github.com/wiggin77/merror v1.0.3
|
||||||
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c
|
||||||
github.com/yuin/goldmark v1.4.5
|
github.com/yuin/goldmark v1.4.7
|
||||||
go.etcd.io/bbolt v1.3.6 // indirect
|
go.etcd.io/bbolt v1.3.6 // indirect
|
||||||
go.uber.org/atomic v1.9.0 // indirect
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954
|
golang.org/x/crypto v0.0.0-20220214200702-86341886e292
|
||||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
|
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20220207234003-57398862261d // indirect
|
golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7 // indirect
|
||||||
golang.org/x/text v0.3.7
|
golang.org/x/text v0.3.7
|
||||||
golang.org/x/tools v0.1.9
|
golang.org/x/tools v0.1.9
|
||||||
google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 // indirect
|
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf // indirect
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
gopkg.in/ini.v1 v1.66.3 // indirect
|
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||||
gopkg.in/mail.v2 v2.3.1
|
gopkg.in/mail.v2 v2.3.1
|
||||||
gopkg.in/olivere/elastic.v6 v6.2.37
|
gopkg.in/olivere/elastic.v6 v6.2.37
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
|
|||||||
64
go.sum
64
go.sum
@@ -165,8 +165,8 @@ github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9
|
|||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
||||||
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
||||||
github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go v1.42.49 h1:g7H76HJWcer7W2bKL+UHEEhj2jg51rQPcR1OO8ntWBY=
|
github.com/aws/aws-sdk-go v1.43.6 h1:FkwmndZR4LjnT2fiKaD18bnqfQ188E8A1IMNI5rcv00=
|
||||||
github.com/aws/aws-sdk-go v1.42.49/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
|
github.com/aws/aws-sdk-go v1.43.6/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.8.0/go.mod h1:xEFuWz+3TYdlPRuo+CqATbeDWIWyaT5uAPwPaWtgse0=
|
github.com/aws/aws-sdk-go-v2 v1.8.0/go.mod h1:xEFuWz+3TYdlPRuo+CqATbeDWIWyaT5uAPwPaWtgse0=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.6.0/go.mod h1:TNtBVmka80lRPk5+S9ZqVfFszOQAGJJ9KbT3EM3CHNU=
|
github.com/aws/aws-sdk-go-v2/config v1.6.0/go.mod h1:TNtBVmka80lRPk5+S9ZqVfFszOQAGJJ9KbT3EM3CHNU=
|
||||||
@@ -215,8 +215,8 @@ github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqO
|
|||||||
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
||||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
github.com/blevesearch/bleve/v2 v2.3.0 h1:5XKlSdpcjeJdE7n0FUEDeJRJwLuhPxq+k5n7h5UaJkg=
|
github.com/blevesearch/bleve/v2 v2.3.1 h1:rbMTDM17tvZ7wTrTp4lJINYRnz57N5oMSw8cYuJ4l0k=
|
||||||
github.com/blevesearch/bleve/v2 v2.3.0/go.mod h1:egW/6gZEhM3oBvRjuHXGvGb92cKZ9867OqPZAmCG8MQ=
|
github.com/blevesearch/bleve/v2 v2.3.1/go.mod h1:kAJuWn2L1TNSUyxtPJD4AGma2/PgMSm7GBlx61F9OBs=
|
||||||
github.com/blevesearch/bleve_index_api v1.0.1 h1:nx9++0hnyiGOHJwQQYfsUGzpRdEVE5LsylmmngQvaFk=
|
github.com/blevesearch/bleve_index_api v1.0.1 h1:nx9++0hnyiGOHJwQQYfsUGzpRdEVE5LsylmmngQvaFk=
|
||||||
github.com/blevesearch/bleve_index_api v1.0.1/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
|
github.com/blevesearch/bleve_index_api v1.0.1/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
|
||||||
github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo=
|
github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo=
|
||||||
@@ -234,16 +234,16 @@ github.com/blevesearch/upsidedown_store_api v1.0.1 h1:1SYRwyoFLwG3sj0ed89RLtM15a
|
|||||||
github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q=
|
github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q=
|
||||||
github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ=
|
github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ=
|
||||||
github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE=
|
github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE=
|
||||||
github.com/blevesearch/zapx/v11 v11.3.2 h1:TDdcbaA0Yz3Y5zpTrpvyW1AeicqWTJL3g8D5g48RiHM=
|
github.com/blevesearch/zapx/v11 v11.3.3 h1:8vQMO5hdA2qPCmicIMuKS+qcvUAEh6Vcb0uve4Nh8e4=
|
||||||
github.com/blevesearch/zapx/v11 v11.3.2/go.mod h1:YzTfUm4kS3e8OmTXDHVV8OzC5MWPO/VPJZQgPNVb4Lc=
|
github.com/blevesearch/zapx/v11 v11.3.3/go.mod h1:YzTfUm4kS3e8OmTXDHVV8OzC5MWPO/VPJZQgPNVb4Lc=
|
||||||
github.com/blevesearch/zapx/v12 v12.3.2 h1:XB09XMg/3ibeIJRCm2zjkaVwrtAuk6c55YRSmVlwUDk=
|
github.com/blevesearch/zapx/v12 v12.3.3 h1:MQO5YNI8MqdPz12ALCoXiJw5cl9QQamYZSp285Z/+Mo=
|
||||||
github.com/blevesearch/zapx/v12 v12.3.2/go.mod h1:RMl6lOZqF+sTxKvhQDJ5yK2LT3Mu7E2p/jGdjAaiRxs=
|
github.com/blevesearch/zapx/v12 v12.3.3/go.mod h1:RMl6lOZqF+sTxKvhQDJ5yK2LT3Mu7E2p/jGdjAaiRxs=
|
||||||
github.com/blevesearch/zapx/v13 v13.3.2 h1:mTvALh6oayreac07VRAv94FLvTHeSBM9sZ1gmVt0N2k=
|
github.com/blevesearch/zapx/v13 v13.3.3 h1:TS4xpMK1ARPYHq+1WwuEOKMOiwvKpTK3RuWOkKlI7BE=
|
||||||
github.com/blevesearch/zapx/v13 v13.3.2/go.mod h1:eppobNM35U4C22yDvTuxV9xPqo10pwfP/jugL4INWG4=
|
github.com/blevesearch/zapx/v13 v13.3.3/go.mod h1:eppobNM35U4C22yDvTuxV9xPqo10pwfP/jugL4INWG4=
|
||||||
github.com/blevesearch/zapx/v14 v14.3.2 h1:oW36JVaZDzrzmBa1X5jdTIYzdhkOQnr/ie13Cb2X7MQ=
|
github.com/blevesearch/zapx/v14 v14.3.3 h1:dqqAzGphKl0yehHKKntDHKlEMhi9B/tJrD4OsWpY7YE=
|
||||||
github.com/blevesearch/zapx/v14 v14.3.2/go.mod h1:zXNcVzukh0AvG57oUtT1T0ndi09H0kELNaNmekEy0jw=
|
github.com/blevesearch/zapx/v14 v14.3.3/go.mod h1:zXNcVzukh0AvG57oUtT1T0ndi09H0kELNaNmekEy0jw=
|
||||||
github.com/blevesearch/zapx/v15 v15.3.2 h1:OZNE4CQ9hQhnB21ySC7x2/9Q35U3WtRXLAh5L2gdCXc=
|
github.com/blevesearch/zapx/v15 v15.3.3 h1:60oE+qsJkveLenJmbc0eaH59GWYCbJJsPDV6Z5hEoYY=
|
||||||
github.com/blevesearch/zapx/v15 v15.3.2/go.mod h1:C+f/97ZzTzK6vt/7sVlZdzZxKu+5+j4SrGCvr9dJzaY=
|
github.com/blevesearch/zapx/v15 v15.3.3/go.mod h1:C+f/97ZzTzK6vt/7sVlZdzZxKu+5+j4SrGCvr9dJzaY=
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||||
@@ -703,8 +703,8 @@ github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pf
|
|||||||
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
||||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd h1:D/H64OK+VY7O0guGbCQaFKwAZlU5t764R++kgIdAGog=
|
github.com/gopherjs/gopherjs v0.0.0-20220221023154-0b2280d3ff96 h1:QJq7UBOuoynsywLk+aC75rC2Cbi2+lQRDaLaizhA+fA=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI=
|
github.com/gopherjs/gopherjs v0.0.0-20220221023154-0b2280d3ff96/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
|
||||||
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
|
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
|
||||||
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
|
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
|
||||||
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||||
@@ -721,8 +721,9 @@ github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlI
|
|||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
|
||||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
|
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||||
|
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0=
|
github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0=
|
||||||
github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
|
github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
|
||||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
@@ -927,8 +928,8 @@ github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8
|
|||||||
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
|
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
|
||||||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/compress v1.14.2 h1:S0OHlFk/Gbon/yauFJ4FfJJF5V0fc5HbBTJazi28pRw=
|
github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4=
|
||||||
github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
@@ -1063,8 +1064,8 @@ github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT
|
|||||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
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/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||||
github.com/minio/minio-go/v7 v7.0.21 h1:xrc4BQr1Fa4s5RwY0xfMjPZFJ1bcYBCCHYlngBdWV+k=
|
github.com/minio/minio-go/v7 v7.0.23 h1:NleyGQvAn9VQMU+YHVrgV4CX+EPtxPt/78lHOOTncy4=
|
||||||
github.com/minio/minio-go/v7 v7.0.21/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do=
|
github.com/minio/minio-go/v7 v7.0.23/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do=
|
||||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
||||||
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
|
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
|
||||||
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
|
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
|
||||||
@@ -1523,8 +1524,8 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.5 h1:4OEQwtW2uLXjEdgnGM3Vg652Pq37X7NOIRzFWb3BzIc=
|
github.com/yuin/goldmark v1.4.7 h1:KHHlQL4EKBZ43vpA1KBEQHfodk4JeIgeb0xJLg7rvDI=
|
||||||
github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
github.com/yuin/goldmark v1.4.7/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
||||||
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
||||||
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
|
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
|
||||||
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
|
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
|
||||||
@@ -1601,8 +1602,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
|
|||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954 h1:BkypuErRT9A9I/iljuaG3/zdMjd/J6m8tKKJQtGfSdA=
|
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE=
|
||||||
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
@@ -1732,7 +1733,6 @@ golang.org/x/net v0.0.0-20211013171255-e13a2654a71e/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|||||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
@@ -1895,8 +1895,8 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220207234003-57398862261d h1:Bm7BNOQt2Qv7ZqysjeLjgCBanX+88Z/OtdvsrEv1Djc=
|
golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7 h1:BXxu8t6QN0G1uff4bzZzSkpsax8+ALqTGUtz08QrV00=
|
||||||
golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
@@ -2135,8 +2135,8 @@ google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ6
|
|||||||
google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 h1:pwzFiZfBTH/GjBWz1BcDwMBaHBo8mZvpLa7eBKJpFAk=
|
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk=
|
||||||
google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
@@ -2213,8 +2213,8 @@ gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|||||||
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w=
|
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
||||||
gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
||||||
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
||||||
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||||
|
|||||||
224
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
сгенерированный
поставляемый
224
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
сгенерированный
поставляемый
@@ -1669,6 +1669,147 @@ var awsPartition = partition{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"api.tunneling.iot": service{
|
||||||
|
Defaults: endpointDefaults{
|
||||||
|
defaultKey{}: endpoint{},
|
||||||
|
defaultKey{
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.{region}.{dnsSuffix}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Endpoints: serviceEndpoints{
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-east-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-northeast-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-northeast-2",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-south-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-southeast-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-southeast-2",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ca-central-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ca-central-1",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.ca-central-1.amazonaws.com",
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "eu-central-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "eu-north-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "eu-west-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "eu-west-2",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "eu-west-3",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-ca-central-1",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.ca-central-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "ca-central-1",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-east-1",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-east-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-1",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-east-2",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-east-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-east-2",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-west-1",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-west-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-1",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-west-2",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-west-2.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-west-2",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "me-south-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "sa-east-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-east-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-east-1",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-east-1.amazonaws.com",
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-east-2",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-east-2",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-east-2.amazonaws.com",
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-west-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-west-1",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-west-1.amazonaws.com",
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-west-2",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-west-2",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-west-2.amazonaws.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
"apigateway": service{
|
"apigateway": service{
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
endpointKey{
|
endpointKey{
|
||||||
@@ -9817,6 +9958,9 @@ var awsPartition = partition{
|
|||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "ap-southeast-2",
|
Region: "ap-southeast-2",
|
||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-southeast-3",
|
||||||
|
}: endpoint{},
|
||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "ca-central-1",
|
Region: "ca-central-1",
|
||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
@@ -13547,6 +13691,9 @@ var awsPartition = partition{
|
|||||||
},
|
},
|
||||||
"mq": service{
|
"mq": service{
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
|
endpointKey{
|
||||||
|
Region: "af-south-1",
|
||||||
|
}: endpoint{},
|
||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "ap-east-1",
|
Region: "ap-east-1",
|
||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
@@ -20669,6 +20816,9 @@ var awsPartition = partition{
|
|||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "ap-northeast-2",
|
Region: "ap-northeast-2",
|
||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "ap-northeast-3",
|
||||||
|
}: endpoint{},
|
||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "ap-south-1",
|
Region: "ap-south-1",
|
||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
@@ -21954,6 +22104,16 @@ var awscnPartition = partition{
|
|||||||
}: endpoint{},
|
}: endpoint{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"api.tunneling.iot": service{
|
||||||
|
Endpoints: serviceEndpoints{
|
||||||
|
endpointKey{
|
||||||
|
Region: "cn-north-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "cn-northwest-1",
|
||||||
|
}: endpoint{},
|
||||||
|
},
|
||||||
|
},
|
||||||
"apigateway": service{
|
"apigateway": service{
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
endpointKey{
|
endpointKey{
|
||||||
@@ -23462,6 +23622,14 @@ var awsusgovPartition = partition{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"acm": service{
|
"acm": service{
|
||||||
|
Defaults: endpointDefaults{
|
||||||
|
defaultKey{}: endpoint{},
|
||||||
|
defaultKey{
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "acm.{region}.{dnsSuffix}",
|
||||||
|
},
|
||||||
|
},
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "us-gov-east-1",
|
Region: "us-gov-east-1",
|
||||||
@@ -23752,6 +23920,54 @@ var awsusgovPartition = partition{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"api.tunneling.iot": service{
|
||||||
|
Defaults: endpointDefaults{
|
||||||
|
defaultKey{}: endpoint{},
|
||||||
|
defaultKey{
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.{region}.{dnsSuffix}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Endpoints: serviceEndpoints{
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-gov-east-1",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-gov-east-1",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "fips-us-gov-west-1",
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com",
|
||||||
|
CredentialScope: credentialScope{
|
||||||
|
Region: "us-gov-west-1",
|
||||||
|
},
|
||||||
|
Deprecated: boxedTrue,
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-gov-east-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-gov-east-1",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com",
|
||||||
|
},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-gov-west-1",
|
||||||
|
}: endpoint{},
|
||||||
|
endpointKey{
|
||||||
|
Region: "us-gov-west-1",
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
"apigateway": service{
|
"apigateway": service{
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
endpointKey{
|
endpointKey{
|
||||||
@@ -24688,6 +24904,14 @@ var awsusgovPartition = partition{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"ec2": service{
|
"ec2": service{
|
||||||
|
Defaults: endpointDefaults{
|
||||||
|
defaultKey{}: endpoint{},
|
||||||
|
defaultKey{
|
||||||
|
Variant: fipsVariant,
|
||||||
|
}: endpoint{
|
||||||
|
Hostname: "ec2.{region}.{dnsSuffix}",
|
||||||
|
},
|
||||||
|
},
|
||||||
Endpoints: serviceEndpoints{
|
Endpoints: serviceEndpoints{
|
||||||
endpointKey{
|
endpointKey{
|
||||||
Region: "us-gov-east-1",
|
Region: "us-gov-east-1",
|
||||||
|
|||||||
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
сгенерированный
поставляемый
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
сгенерированный
поставляемый
@@ -5,4 +5,4 @@ package aws
|
|||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.42.49"
|
const SDKVersion = "1.43.6"
|
||||||
|
|||||||
4
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
сгенерированный
поставляемый
4
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
сгенерированный
поставляемый
@@ -272,6 +272,9 @@ func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error)
|
|||||||
|
|
||||||
switch value := v.Interface().(type) {
|
switch value := v.Interface().(type) {
|
||||||
case string:
|
case string:
|
||||||
|
if tag.Get("suppressedJSONValue") == "true" && tag.Get("location") == "header" {
|
||||||
|
value = base64.StdEncoding.EncodeToString([]byte(value))
|
||||||
|
}
|
||||||
str = value
|
str = value
|
||||||
case []byte:
|
case []byte:
|
||||||
str = base64.StdEncoding.EncodeToString(value)
|
str = base64.StdEncoding.EncodeToString(value)
|
||||||
@@ -306,5 +309,6 @@ func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error)
|
|||||||
err := fmt.Errorf("unsupported value for param %v (%s)", v.Interface(), v.Type())
|
err := fmt.Errorf("unsupported value for param %v (%s)", v.Interface(), v.Type())
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return str, nil
|
return str, nil
|
||||||
}
|
}
|
||||||
|
|||||||
7
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
сгенерированный
поставляемый
7
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
сгенерированный
поставляемый
@@ -204,6 +204,13 @@ func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) erro
|
|||||||
|
|
||||||
switch v.Interface().(type) {
|
switch v.Interface().(type) {
|
||||||
case *string:
|
case *string:
|
||||||
|
if tag.Get("suppressedJSONValue") == "true" && tag.Get("location") == "header" {
|
||||||
|
b, err := base64.StdEncoding.DecodeString(header)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to decode JSONValue, %v", err)
|
||||||
|
}
|
||||||
|
header = string(b)
|
||||||
|
}
|
||||||
v.Set(reflect.ValueOf(&header))
|
v.Set(reflect.ValueOf(&header))
|
||||||
case []byte:
|
case []byte:
|
||||||
b, err := base64.StdEncoding.DecodeString(header)
|
b, err := base64.StdEncoding.DecodeString(header)
|
||||||
|
|||||||
10
vendor/github.com/blevesearch/bleve/v2/go.mod
сгенерированный
поставляемый
10
vendor/github.com/blevesearch/bleve/v2/go.mod
сгенерированный
поставляемый
@@ -12,11 +12,11 @@ require (
|
|||||||
github.com/blevesearch/snowballstem v0.9.0
|
github.com/blevesearch/snowballstem v0.9.0
|
||||||
github.com/blevesearch/upsidedown_store_api v1.0.1
|
github.com/blevesearch/upsidedown_store_api v1.0.1
|
||||||
github.com/blevesearch/vellum v1.0.7
|
github.com/blevesearch/vellum v1.0.7
|
||||||
github.com/blevesearch/zapx/v11 v11.3.2
|
github.com/blevesearch/zapx/v11 v11.3.3
|
||||||
github.com/blevesearch/zapx/v12 v12.3.2
|
github.com/blevesearch/zapx/v12 v12.3.3
|
||||||
github.com/blevesearch/zapx/v13 v13.3.2
|
github.com/blevesearch/zapx/v13 v13.3.3
|
||||||
github.com/blevesearch/zapx/v14 v14.3.2
|
github.com/blevesearch/zapx/v14 v14.3.3
|
||||||
github.com/blevesearch/zapx/v15 v15.3.2
|
github.com/blevesearch/zapx/v15 v15.3.3
|
||||||
github.com/couchbase/moss v0.2.0
|
github.com/couchbase/moss v0.2.0
|
||||||
github.com/golang/protobuf v1.3.2
|
github.com/golang/protobuf v1.3.2
|
||||||
github.com/kljensen/snowball v0.6.0
|
github.com/kljensen/snowball v0.6.0
|
||||||
|
|||||||
20
vendor/github.com/blevesearch/bleve/v2/go.sum
сгенерированный
поставляемый
20
vendor/github.com/blevesearch/bleve/v2/go.sum
сгенерированный
поставляемый
@@ -21,16 +21,16 @@ github.com/blevesearch/upsidedown_store_api v1.0.1 h1:1SYRwyoFLwG3sj0ed89RLtM15a
|
|||||||
github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q=
|
github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q=
|
||||||
github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ=
|
github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ=
|
||||||
github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE=
|
github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE=
|
||||||
github.com/blevesearch/zapx/v11 v11.3.2 h1:TDdcbaA0Yz3Y5zpTrpvyW1AeicqWTJL3g8D5g48RiHM=
|
github.com/blevesearch/zapx/v11 v11.3.3 h1:8vQMO5hdA2qPCmicIMuKS+qcvUAEh6Vcb0uve4Nh8e4=
|
||||||
github.com/blevesearch/zapx/v11 v11.3.2/go.mod h1:YzTfUm4kS3e8OmTXDHVV8OzC5MWPO/VPJZQgPNVb4Lc=
|
github.com/blevesearch/zapx/v11 v11.3.3/go.mod h1:YzTfUm4kS3e8OmTXDHVV8OzC5MWPO/VPJZQgPNVb4Lc=
|
||||||
github.com/blevesearch/zapx/v12 v12.3.2 h1:XB09XMg/3ibeIJRCm2zjkaVwrtAuk6c55YRSmVlwUDk=
|
github.com/blevesearch/zapx/v12 v12.3.3 h1:MQO5YNI8MqdPz12ALCoXiJw5cl9QQamYZSp285Z/+Mo=
|
||||||
github.com/blevesearch/zapx/v12 v12.3.2/go.mod h1:RMl6lOZqF+sTxKvhQDJ5yK2LT3Mu7E2p/jGdjAaiRxs=
|
github.com/blevesearch/zapx/v12 v12.3.3/go.mod h1:RMl6lOZqF+sTxKvhQDJ5yK2LT3Mu7E2p/jGdjAaiRxs=
|
||||||
github.com/blevesearch/zapx/v13 v13.3.2 h1:mTvALh6oayreac07VRAv94FLvTHeSBM9sZ1gmVt0N2k=
|
github.com/blevesearch/zapx/v13 v13.3.3 h1:TS4xpMK1ARPYHq+1WwuEOKMOiwvKpTK3RuWOkKlI7BE=
|
||||||
github.com/blevesearch/zapx/v13 v13.3.2/go.mod h1:eppobNM35U4C22yDvTuxV9xPqo10pwfP/jugL4INWG4=
|
github.com/blevesearch/zapx/v13 v13.3.3/go.mod h1:eppobNM35U4C22yDvTuxV9xPqo10pwfP/jugL4INWG4=
|
||||||
github.com/blevesearch/zapx/v14 v14.3.2 h1:oW36JVaZDzrzmBa1X5jdTIYzdhkOQnr/ie13Cb2X7MQ=
|
github.com/blevesearch/zapx/v14 v14.3.3 h1:dqqAzGphKl0yehHKKntDHKlEMhi9B/tJrD4OsWpY7YE=
|
||||||
github.com/blevesearch/zapx/v14 v14.3.2/go.mod h1:zXNcVzukh0AvG57oUtT1T0ndi09H0kELNaNmekEy0jw=
|
github.com/blevesearch/zapx/v14 v14.3.3/go.mod h1:zXNcVzukh0AvG57oUtT1T0ndi09H0kELNaNmekEy0jw=
|
||||||
github.com/blevesearch/zapx/v15 v15.3.2 h1:OZNE4CQ9hQhnB21ySC7x2/9Q35U3WtRXLAh5L2gdCXc=
|
github.com/blevesearch/zapx/v15 v15.3.3 h1:60oE+qsJkveLenJmbc0eaH59GWYCbJJsPDV6Z5hEoYY=
|
||||||
github.com/blevesearch/zapx/v15 v15.3.2/go.mod h1:C+f/97ZzTzK6vt/7sVlZdzZxKu+5+j4SrGCvr9dJzaY=
|
github.com/blevesearch/zapx/v15 v15.3.3/go.mod h1:C+f/97ZzTzK6vt/7sVlZdzZxKu+5+j4SrGCvr9dJzaY=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
|
|||||||
24
vendor/github.com/blevesearch/bleve/v2/index/scorch/introducer.go
сгенерированный
поставляемый
24
vendor/github.com/blevesearch/bleve/v2/index/scorch/introducer.go
сгенерированный
поставляемый
@@ -16,6 +16,7 @@ package scorch
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/RoaringBitmap/roaring"
|
"github.com/RoaringBitmap/roaring"
|
||||||
@@ -127,6 +128,7 @@ func (s *Scorch) introduceSegment(next *segmentIntroduction) error {
|
|||||||
// iterate through current segments
|
// iterate through current segments
|
||||||
var running uint64
|
var running uint64
|
||||||
var docsToPersistCount, memSegments, fileSegments uint64
|
var docsToPersistCount, memSegments, fileSegments uint64
|
||||||
|
var droppedSegmentFiles []string
|
||||||
for i := range root.segment {
|
for i := range root.segment {
|
||||||
// see if optimistic work included this segment
|
// see if optimistic work included this segment
|
||||||
delta, ok := next.obsoletes[root.segment[i].id]
|
delta, ok := next.obsoletes[root.segment[i].id]
|
||||||
@@ -164,6 +166,9 @@ func (s *Scorch) introduceSegment(next *segmentIntroduction) error {
|
|||||||
root.segment[i].segment.AddRef()
|
root.segment[i].segment.AddRef()
|
||||||
newSnapshot.offsets = append(newSnapshot.offsets, running)
|
newSnapshot.offsets = append(newSnapshot.offsets, running)
|
||||||
running += newss.segment.Count()
|
running += newss.segment.Count()
|
||||||
|
} else if seg, ok := newss.segment.(segment.PersistedSegment); ok {
|
||||||
|
droppedSegmentFiles = append(droppedSegmentFiles,
|
||||||
|
filepath.Base(seg.Path()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if isMemorySegment(root.segment[i]) {
|
if isMemorySegment(root.segment[i]) {
|
||||||
@@ -228,6 +233,12 @@ func (s *Scorch) introduceSegment(next *segmentIntroduction) error {
|
|||||||
_ = rootPrev.DecRef()
|
_ = rootPrev.DecRef()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update the removal eligibility for those segment files
|
||||||
|
// that are not a part of the latest root.
|
||||||
|
for _, filename := range droppedSegmentFiles {
|
||||||
|
s.unmarkIneligibleForRemoval(filename)
|
||||||
|
}
|
||||||
|
|
||||||
close(next.applied)
|
close(next.applied)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -332,6 +343,7 @@ func (s *Scorch) introduceMerge(nextMerge *segmentMerge) {
|
|||||||
// iterate through current segments
|
// iterate through current segments
|
||||||
newSegmentDeleted := roaring.NewBitmap()
|
newSegmentDeleted := roaring.NewBitmap()
|
||||||
var running, docsToPersistCount, memSegments, fileSegments uint64
|
var running, docsToPersistCount, memSegments, fileSegments uint64
|
||||||
|
var droppedSegmentFiles []string
|
||||||
for i := range root.segment {
|
for i := range root.segment {
|
||||||
segmentID := root.segment[i].id
|
segmentID := root.segment[i].id
|
||||||
if segSnapAtMerge, ok := nextMerge.old[segmentID]; ok {
|
if segSnapAtMerge, ok := nextMerge.old[segmentID]; ok {
|
||||||
@@ -374,8 +386,12 @@ func (s *Scorch) introduceMerge(nextMerge *segmentMerge) {
|
|||||||
} else {
|
} else {
|
||||||
fileSegments++
|
fileSegments++
|
||||||
}
|
}
|
||||||
|
} else if root.segment[i].LiveSize() == 0 {
|
||||||
|
if seg, ok := root.segment[i].segment.(segment.PersistedSegment); ok {
|
||||||
|
droppedSegmentFiles = append(droppedSegmentFiles,
|
||||||
|
filepath.Base(seg.Path()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// before the newMerge introduction, need to clean the newly
|
// before the newMerge introduction, need to clean the newly
|
||||||
@@ -441,6 +457,12 @@ func (s *Scorch) introduceMerge(nextMerge *segmentMerge) {
|
|||||||
_ = rootPrev.DecRef()
|
_ = rootPrev.DecRef()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update the removal eligibility for those segment files
|
||||||
|
// that are not a part of the latest root.
|
||||||
|
for _, filename := range droppedSegmentFiles {
|
||||||
|
s.unmarkIneligibleForRemoval(filename)
|
||||||
|
}
|
||||||
|
|
||||||
// notify requester that we incorporated this
|
// notify requester that we incorporated this
|
||||||
nextMerge.notifyCh <- &mergeTaskIntroStatus{
|
nextMerge.notifyCh <- &mergeTaskIntroStatus{
|
||||||
indexSnapshot: newSnapshot,
|
indexSnapshot: newSnapshot,
|
||||||
|
|||||||
3
vendor/github.com/blevesearch/bleve/v2/search/facets_builder.go
сгенерированный
поставляемый
3
vendor/github.com/blevesearch/bleve/v2/search/facets_builder.go
сгенерированный
поставляемый
@@ -127,6 +127,9 @@ type TermFacets struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (tf *TermFacets) Terms() []*TermFacet {
|
func (tf *TermFacets) Terms() []*TermFacet {
|
||||||
|
if tf == nil {
|
||||||
|
return []*TermFacet{}
|
||||||
|
}
|
||||||
return tf.termFacets
|
return tf.termFacets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/blevesearch/zapx/v11/memuvarint.go
сгенерированный
поставляемый
11
vendor/github.com/blevesearch/zapx/v11/memuvarint.go
сгенерированный
поставляемый
@@ -39,6 +39,11 @@ func (r *memUvarintReader) Len() int {
|
|||||||
// ReadUvarint reads an encoded uint64. The original code this was
|
// ReadUvarint reads an encoded uint64. The original code this was
|
||||||
// based on is at encoding/binary/ReadUvarint().
|
// based on is at encoding/binary/ReadUvarint().
|
||||||
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
// nothing else to read
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
var x uint64
|
var x uint64
|
||||||
var s uint
|
var s uint
|
||||||
var C = r.C
|
var C = r.C
|
||||||
@@ -59,7 +64,7 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// why the "extra" >= check? The normal case is that s <
|
// why the "extra" >= check? The normal case is that s <
|
||||||
// 63, so we check this single >= guard first so that we
|
// 63, so we check this single >= guard first so that we
|
||||||
// hit the normal, nil-error return pathway sooner.
|
// hit the normal, nil-error return pathway sooner.
|
||||||
if s >= 63 && (s > 63 || s == 63 && b > 1) {
|
if s >= 63 && (s > 63 || b > 1) {
|
||||||
return 0, fmt.Errorf("memUvarintReader overflow")
|
return 0, fmt.Errorf("memUvarintReader overflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +79,10 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// SkipUvarint skips ahead one encoded uint64.
|
// SkipUvarint skips ahead one encoded uint64.
|
||||||
func (r *memUvarintReader) SkipUvarint() {
|
func (r *memUvarintReader) SkipUvarint() {
|
||||||
for {
|
for {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b := r.S[r.C]
|
b := r.S[r.C]
|
||||||
r.C++
|
r.C++
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/blevesearch/zapx/v12/memuvarint.go
сгенерированный
поставляемый
11
vendor/github.com/blevesearch/zapx/v12/memuvarint.go
сгенерированный
поставляемый
@@ -39,6 +39,11 @@ func (r *memUvarintReader) Len() int {
|
|||||||
// ReadUvarint reads an encoded uint64. The original code this was
|
// ReadUvarint reads an encoded uint64. The original code this was
|
||||||
// based on is at encoding/binary/ReadUvarint().
|
// based on is at encoding/binary/ReadUvarint().
|
||||||
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
// nothing else to read
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
var x uint64
|
var x uint64
|
||||||
var s uint
|
var s uint
|
||||||
var C = r.C
|
var C = r.C
|
||||||
@@ -59,7 +64,7 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// why the "extra" >= check? The normal case is that s <
|
// why the "extra" >= check? The normal case is that s <
|
||||||
// 63, so we check this single >= guard first so that we
|
// 63, so we check this single >= guard first so that we
|
||||||
// hit the normal, nil-error return pathway sooner.
|
// hit the normal, nil-error return pathway sooner.
|
||||||
if s >= 63 && (s > 63 || s == 63 && b > 1) {
|
if s >= 63 && (s > 63 || b > 1) {
|
||||||
return 0, fmt.Errorf("memUvarintReader overflow")
|
return 0, fmt.Errorf("memUvarintReader overflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +79,10 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// SkipUvarint skips ahead one encoded uint64.
|
// SkipUvarint skips ahead one encoded uint64.
|
||||||
func (r *memUvarintReader) SkipUvarint() {
|
func (r *memUvarintReader) SkipUvarint() {
|
||||||
for {
|
for {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b := r.S[r.C]
|
b := r.S[r.C]
|
||||||
r.C++
|
r.C++
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/blevesearch/zapx/v13/memuvarint.go
сгенерированный
поставляемый
11
vendor/github.com/blevesearch/zapx/v13/memuvarint.go
сгенерированный
поставляемый
@@ -39,6 +39,11 @@ func (r *memUvarintReader) Len() int {
|
|||||||
// ReadUvarint reads an encoded uint64. The original code this was
|
// ReadUvarint reads an encoded uint64. The original code this was
|
||||||
// based on is at encoding/binary/ReadUvarint().
|
// based on is at encoding/binary/ReadUvarint().
|
||||||
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
// nothing else to read
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
var x uint64
|
var x uint64
|
||||||
var s uint
|
var s uint
|
||||||
var C = r.C
|
var C = r.C
|
||||||
@@ -59,7 +64,7 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// why the "extra" >= check? The normal case is that s <
|
// why the "extra" >= check? The normal case is that s <
|
||||||
// 63, so we check this single >= guard first so that we
|
// 63, so we check this single >= guard first so that we
|
||||||
// hit the normal, nil-error return pathway sooner.
|
// hit the normal, nil-error return pathway sooner.
|
||||||
if s >= 63 && (s > 63 || s == 63 && b > 1) {
|
if s >= 63 && (s > 63 || b > 1) {
|
||||||
return 0, fmt.Errorf("memUvarintReader overflow")
|
return 0, fmt.Errorf("memUvarintReader overflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +79,10 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// SkipUvarint skips ahead one encoded uint64.
|
// SkipUvarint skips ahead one encoded uint64.
|
||||||
func (r *memUvarintReader) SkipUvarint() {
|
func (r *memUvarintReader) SkipUvarint() {
|
||||||
for {
|
for {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b := r.S[r.C]
|
b := r.S[r.C]
|
||||||
r.C++
|
r.C++
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/blevesearch/zapx/v14/memuvarint.go
сгенерированный
поставляемый
11
vendor/github.com/blevesearch/zapx/v14/memuvarint.go
сгенерированный
поставляемый
@@ -39,6 +39,11 @@ func (r *memUvarintReader) Len() int {
|
|||||||
// ReadUvarint reads an encoded uint64. The original code this was
|
// ReadUvarint reads an encoded uint64. The original code this was
|
||||||
// based on is at encoding/binary/ReadUvarint().
|
// based on is at encoding/binary/ReadUvarint().
|
||||||
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
// nothing else to read
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
var x uint64
|
var x uint64
|
||||||
var s uint
|
var s uint
|
||||||
var C = r.C
|
var C = r.C
|
||||||
@@ -59,7 +64,7 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// why the "extra" >= check? The normal case is that s <
|
// why the "extra" >= check? The normal case is that s <
|
||||||
// 63, so we check this single >= guard first so that we
|
// 63, so we check this single >= guard first so that we
|
||||||
// hit the normal, nil-error return pathway sooner.
|
// hit the normal, nil-error return pathway sooner.
|
||||||
if s >= 63 && (s > 63 || s == 63 && b > 1) {
|
if s >= 63 && (s > 63 || b > 1) {
|
||||||
return 0, fmt.Errorf("memUvarintReader overflow")
|
return 0, fmt.Errorf("memUvarintReader overflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +79,10 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// SkipUvarint skips ahead one encoded uint64.
|
// SkipUvarint skips ahead one encoded uint64.
|
||||||
func (r *memUvarintReader) SkipUvarint() {
|
func (r *memUvarintReader) SkipUvarint() {
|
||||||
for {
|
for {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b := r.S[r.C]
|
b := r.S[r.C]
|
||||||
r.C++
|
r.C++
|
||||||
|
|
||||||
|
|||||||
11
vendor/github.com/blevesearch/zapx/v15/memuvarint.go
сгенерированный
поставляемый
11
vendor/github.com/blevesearch/zapx/v15/memuvarint.go
сгенерированный
поставляемый
@@ -39,6 +39,11 @@ func (r *memUvarintReader) Len() int {
|
|||||||
// ReadUvarint reads an encoded uint64. The original code this was
|
// ReadUvarint reads an encoded uint64. The original code this was
|
||||||
// based on is at encoding/binary/ReadUvarint().
|
// based on is at encoding/binary/ReadUvarint().
|
||||||
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
// nothing else to read
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
var x uint64
|
var x uint64
|
||||||
var s uint
|
var s uint
|
||||||
var C = r.C
|
var C = r.C
|
||||||
@@ -59,7 +64,7 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// why the "extra" >= check? The normal case is that s <
|
// why the "extra" >= check? The normal case is that s <
|
||||||
// 63, so we check this single >= guard first so that we
|
// 63, so we check this single >= guard first so that we
|
||||||
// hit the normal, nil-error return pathway sooner.
|
// hit the normal, nil-error return pathway sooner.
|
||||||
if s >= 63 && (s > 63 || s == 63 && b > 1) {
|
if s >= 63 && (s > 63 || b > 1) {
|
||||||
return 0, fmt.Errorf("memUvarintReader overflow")
|
return 0, fmt.Errorf("memUvarintReader overflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +79,10 @@ func (r *memUvarintReader) ReadUvarint() (uint64, error) {
|
|||||||
// SkipUvarint skips ahead one encoded uint64.
|
// SkipUvarint skips ahead one encoded uint64.
|
||||||
func (r *memUvarintReader) SkipUvarint() {
|
func (r *memUvarintReader) SkipUvarint() {
|
||||||
for {
|
for {
|
||||||
|
if r.C >= len(r.S) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b := r.S[r.C]
|
b := r.S[r.C]
|
||||||
r.C++
|
r.C++
|
||||||
|
|
||||||
|
|||||||
39
vendor/github.com/gorilla/websocket/README.md
сгенерированный
поставляемый
39
vendor/github.com/gorilla/websocket/README.md
сгенерированный
поставляемый
@@ -6,6 +6,13 @@
|
|||||||
Gorilla WebSocket is a [Go](http://golang.org/) implementation of the
|
Gorilla WebSocket is a [Go](http://golang.org/) implementation of the
|
||||||
[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol.
|
[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
⚠️ **[The Gorilla WebSocket Package is looking for a new maintainer](https://github.com/gorilla/websocket/issues/370)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
* [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc)
|
* [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc)
|
||||||
@@ -30,35 +37,3 @@ The Gorilla WebSocket package passes the server tests in the [Autobahn Test
|
|||||||
Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn
|
Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn
|
||||||
subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn).
|
subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn).
|
||||||
|
|
||||||
### Gorilla WebSocket compared with other packages
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th></th>
|
|
||||||
<th><a href="http://godoc.org/github.com/gorilla/websocket">github.com/gorilla</a></th>
|
|
||||||
<th><a href="http://godoc.org/golang.org/x/net/websocket">golang.org/x/net</a></th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<tr><td colspan="3"><a href="http://tools.ietf.org/html/rfc6455">RFC 6455</a> Features</td></tr>
|
|
||||||
<tr><td>Passes <a href="https://github.com/crossbario/autobahn-testsuite">Autobahn Test Suite</a></td><td><a href="https://github.com/gorilla/websocket/tree/master/examples/autobahn">Yes</a></td><td>No</td></tr>
|
|
||||||
<tr><td>Receive <a href="https://tools.ietf.org/html/rfc6455#section-5.4">fragmented</a> message<td>Yes</td><td><a href="https://code.google.com/p/go/issues/detail?id=7632">No</a>, see note 1</td></tr>
|
|
||||||
<tr><td>Send <a href="https://tools.ietf.org/html/rfc6455#section-5.5.1">close</a> message</td><td><a href="http://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages">Yes</a></td><td><a href="https://code.google.com/p/go/issues/detail?id=4588">No</a></td></tr>
|
|
||||||
<tr><td>Send <a href="https://tools.ietf.org/html/rfc6455#section-5.5.2">pings</a> and receive <a href="https://tools.ietf.org/html/rfc6455#section-5.5.3">pongs</a></td><td><a href="http://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages">Yes</a></td><td>No</td></tr>
|
|
||||||
<tr><td>Get the <a href="https://tools.ietf.org/html/rfc6455#section-5.6">type</a> of a received data message</td><td>Yes</td><td>Yes, see note 2</td></tr>
|
|
||||||
<tr><td colspan="3">Other Features</tr></td>
|
|
||||||
<tr><td><a href="https://tools.ietf.org/html/rfc7692">Compression Extensions</a></td><td>Experimental</td><td>No</td></tr>
|
|
||||||
<tr><td>Read message using io.Reader</td><td><a href="http://godoc.org/github.com/gorilla/websocket#Conn.NextReader">Yes</a></td><td>No, see note 3</td></tr>
|
|
||||||
<tr><td>Write message using io.WriteCloser</td><td><a href="http://godoc.org/github.com/gorilla/websocket#Conn.NextWriter">Yes</a></td><td>No, see note 3</td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html).
|
|
||||||
2. The application can get the type of a received data message by implementing
|
|
||||||
a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal)
|
|
||||||
function.
|
|
||||||
3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries.
|
|
||||||
Read returns when the input buffer is full or a frame boundary is
|
|
||||||
encountered. Each call to Write sends a single frame message. The Gorilla
|
|
||||||
io.Reader and io.WriteCloser operate on a single WebSocket message.
|
|
||||||
|
|
||||||
|
|||||||
77
vendor/github.com/gorilla/websocket/client.go
сгенерированный
поставляемый
77
vendor/github.com/gorilla/websocket/client.go
сгенерированный
поставляемый
@@ -48,15 +48,23 @@ func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufS
|
|||||||
}
|
}
|
||||||
|
|
||||||
// A Dialer contains options for connecting to WebSocket server.
|
// A Dialer contains options for connecting to WebSocket server.
|
||||||
|
//
|
||||||
|
// It is safe to call Dialer's methods concurrently.
|
||||||
type Dialer struct {
|
type Dialer struct {
|
||||||
// NetDial specifies the dial function for creating TCP connections. If
|
// NetDial specifies the dial function for creating TCP connections. If
|
||||||
// NetDial is nil, net.Dial is used.
|
// NetDial is nil, net.Dial is used.
|
||||||
NetDial func(network, addr string) (net.Conn, error)
|
NetDial func(network, addr string) (net.Conn, error)
|
||||||
|
|
||||||
// NetDialContext specifies the dial function for creating TCP connections. If
|
// NetDialContext specifies the dial function for creating TCP connections. If
|
||||||
// NetDialContext is nil, net.DialContext is used.
|
// NetDialContext is nil, NetDial is used.
|
||||||
NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
|
NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
|
||||||
|
|
||||||
|
// NetDialTLSContext specifies the dial function for creating TLS/TCP connections. If
|
||||||
|
// NetDialTLSContext is nil, NetDialContext is used.
|
||||||
|
// If NetDialTLSContext is set, Dial assumes the TLS handshake is done there and
|
||||||
|
// TLSClientConfig is ignored.
|
||||||
|
NetDialTLSContext func(ctx context.Context, network, addr string) (net.Conn, error)
|
||||||
|
|
||||||
// Proxy specifies a function to return a proxy for a given
|
// Proxy specifies a function to return a proxy for a given
|
||||||
// Request. If the function returns a non-nil error, the
|
// Request. If the function returns a non-nil error, the
|
||||||
// request is aborted with the provided error.
|
// request is aborted with the provided error.
|
||||||
@@ -65,6 +73,8 @@ type Dialer struct {
|
|||||||
|
|
||||||
// TLSClientConfig specifies the TLS configuration to use with tls.Client.
|
// TLSClientConfig specifies the TLS configuration to use with tls.Client.
|
||||||
// If nil, the default configuration is used.
|
// If nil, the default configuration is used.
|
||||||
|
// If either NetDialTLS or NetDialTLSContext are set, Dial assumes the TLS handshake
|
||||||
|
// is done there and TLSClientConfig is ignored.
|
||||||
TLSClientConfig *tls.Config
|
TLSClientConfig *tls.Config
|
||||||
|
|
||||||
// HandshakeTimeout specifies the duration for the handshake to complete.
|
// HandshakeTimeout specifies the duration for the handshake to complete.
|
||||||
@@ -176,7 +186,7 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
}
|
}
|
||||||
|
|
||||||
req := &http.Request{
|
req := &http.Request{
|
||||||
Method: "GET",
|
Method: http.MethodGet,
|
||||||
URL: u,
|
URL: u,
|
||||||
Proto: "HTTP/1.1",
|
Proto: "HTTP/1.1",
|
||||||
ProtoMajor: 1,
|
ProtoMajor: 1,
|
||||||
@@ -237,13 +247,32 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
// Get network dial function.
|
// Get network dial function.
|
||||||
var netDial func(network, add string) (net.Conn, error)
|
var netDial func(network, add string) (net.Conn, error)
|
||||||
|
|
||||||
if d.NetDialContext != nil {
|
switch u.Scheme {
|
||||||
netDial = func(network, addr string) (net.Conn, error) {
|
case "http":
|
||||||
return d.NetDialContext(ctx, network, addr)
|
if d.NetDialContext != nil {
|
||||||
|
netDial = func(network, addr string) (net.Conn, error) {
|
||||||
|
return d.NetDialContext(ctx, network, addr)
|
||||||
|
}
|
||||||
|
} else if d.NetDial != nil {
|
||||||
|
netDial = d.NetDial
|
||||||
}
|
}
|
||||||
} else if d.NetDial != nil {
|
case "https":
|
||||||
netDial = d.NetDial
|
if d.NetDialTLSContext != nil {
|
||||||
} else {
|
netDial = func(network, addr string) (net.Conn, error) {
|
||||||
|
return d.NetDialTLSContext(ctx, network, addr)
|
||||||
|
}
|
||||||
|
} else if d.NetDialContext != nil {
|
||||||
|
netDial = func(network, addr string) (net.Conn, error) {
|
||||||
|
return d.NetDialContext(ctx, network, addr)
|
||||||
|
}
|
||||||
|
} else if d.NetDial != nil {
|
||||||
|
netDial = d.NetDial
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return nil, nil, errMalformedURL
|
||||||
|
}
|
||||||
|
|
||||||
|
if netDial == nil {
|
||||||
netDialer := &net.Dialer{}
|
netDialer := &net.Dialer{}
|
||||||
netDial = func(network, addr string) (net.Conn, error) {
|
netDial = func(network, addr string) (net.Conn, error) {
|
||||||
return netDialer.DialContext(ctx, network, addr)
|
return netDialer.DialContext(ctx, network, addr)
|
||||||
@@ -304,7 +333,9 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if u.Scheme == "https" {
|
if u.Scheme == "https" && d.NetDialTLSContext == nil {
|
||||||
|
// If NetDialTLSContext is set, assume that the TLS handshake has already been done
|
||||||
|
|
||||||
cfg := cloneTLSConfig(d.TLSClientConfig)
|
cfg := cloneTLSConfig(d.TLSClientConfig)
|
||||||
if cfg.ServerName == "" {
|
if cfg.ServerName == "" {
|
||||||
cfg.ServerName = hostNoPort
|
cfg.ServerName = hostNoPort
|
||||||
@@ -312,11 +343,12 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
tlsConn := tls.Client(netConn, cfg)
|
tlsConn := tls.Client(netConn, cfg)
|
||||||
netConn = tlsConn
|
netConn = tlsConn
|
||||||
|
|
||||||
var err error
|
if trace != nil && trace.TLSHandshakeStart != nil {
|
||||||
if trace != nil {
|
trace.TLSHandshakeStart()
|
||||||
err = doHandshakeWithTrace(trace, tlsConn, cfg)
|
}
|
||||||
} else {
|
err := doHandshake(ctx, tlsConn, cfg)
|
||||||
err = doHandshake(tlsConn, cfg)
|
if trace != nil && trace.TLSHandshakeDone != nil {
|
||||||
|
trace.TLSHandshakeDone(tlsConn.ConnectionState(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -348,8 +380,8 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != 101 ||
|
if resp.StatusCode != 101 ||
|
||||||
!strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") ||
|
!tokenListContainsValue(resp.Header, "Upgrade", "websocket") ||
|
||||||
!strings.EqualFold(resp.Header.Get("Connection"), "upgrade") ||
|
!tokenListContainsValue(resp.Header, "Connection", "upgrade") ||
|
||||||
resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) {
|
resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) {
|
||||||
// Before closing the network connection on return from this
|
// Before closing the network connection on return from this
|
||||||
// function, slurp up some of the response to aid application
|
// function, slurp up some of the response to aid application
|
||||||
@@ -382,14 +414,9 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||||||
return conn, resp, nil
|
return conn, resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func doHandshake(tlsConn *tls.Conn, cfg *tls.Config) error {
|
func cloneTLSConfig(cfg *tls.Config) *tls.Config {
|
||||||
if err := tlsConn.Handshake(); err != nil {
|
if cfg == nil {
|
||||||
return err
|
return &tls.Config{}
|
||||||
}
|
}
|
||||||
if !cfg.InsecureSkipVerify {
|
return cfg.Clone()
|
||||||
if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
16
vendor/github.com/gorilla/websocket/client_clone.go
сгенерированный
поставляемый
16
vendor/github.com/gorilla/websocket/client_clone.go
сгенерированный
поставляемый
@@ -1,16 +0,0 @@
|
|||||||
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
import "crypto/tls"
|
|
||||||
|
|
||||||
func cloneTLSConfig(cfg *tls.Config) *tls.Config {
|
|
||||||
if cfg == nil {
|
|
||||||
return &tls.Config{}
|
|
||||||
}
|
|
||||||
return cfg.Clone()
|
|
||||||
}
|
|
||||||
38
vendor/github.com/gorilla/websocket/client_clone_legacy.go
сгенерированный
поставляемый
38
vendor/github.com/gorilla/websocket/client_clone_legacy.go
сгенерированный
поставляемый
@@ -1,38 +0,0 @@
|
|||||||
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
import "crypto/tls"
|
|
||||||
|
|
||||||
// cloneTLSConfig clones all public fields except the fields
|
|
||||||
// SessionTicketsDisabled and SessionTicketKey. This avoids copying the
|
|
||||||
// sync.Mutex in the sync.Once and makes it safe to call cloneTLSConfig on a
|
|
||||||
// config in active use.
|
|
||||||
func cloneTLSConfig(cfg *tls.Config) *tls.Config {
|
|
||||||
if cfg == nil {
|
|
||||||
return &tls.Config{}
|
|
||||||
}
|
|
||||||
return &tls.Config{
|
|
||||||
Rand: cfg.Rand,
|
|
||||||
Time: cfg.Time,
|
|
||||||
Certificates: cfg.Certificates,
|
|
||||||
NameToCertificate: cfg.NameToCertificate,
|
|
||||||
GetCertificate: cfg.GetCertificate,
|
|
||||||
RootCAs: cfg.RootCAs,
|
|
||||||
NextProtos: cfg.NextProtos,
|
|
||||||
ServerName: cfg.ServerName,
|
|
||||||
ClientAuth: cfg.ClientAuth,
|
|
||||||
ClientCAs: cfg.ClientCAs,
|
|
||||||
InsecureSkipVerify: cfg.InsecureSkipVerify,
|
|
||||||
CipherSuites: cfg.CipherSuites,
|
|
||||||
PreferServerCipherSuites: cfg.PreferServerCipherSuites,
|
|
||||||
ClientSessionCache: cfg.ClientSessionCache,
|
|
||||||
MinVersion: cfg.MinVersion,
|
|
||||||
MaxVersion: cfg.MaxVersion,
|
|
||||||
CurvePreferences: cfg.CurvePreferences,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
63
vendor/github.com/gorilla/websocket/conn.go
сгенерированный
поставляемый
63
vendor/github.com/gorilla/websocket/conn.go
сгенерированный
поставляемый
@@ -13,6 +13,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
@@ -401,6 +402,12 @@ func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Conn) writeBufs(bufs ...[]byte) error {
|
||||||
|
b := net.Buffers(bufs)
|
||||||
|
_, err := b.WriteTo(c.conn)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// WriteControl writes a control message with the given deadline. The allowed
|
// WriteControl writes a control message with the given deadline. The allowed
|
||||||
// message types are CloseMessage, PingMessage and PongMessage.
|
// message types are CloseMessage, PingMessage and PongMessage.
|
||||||
func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error {
|
func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error {
|
||||||
@@ -794,47 +801,69 @@ func (c *Conn) advanceFrame() (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. Read and parse first two bytes of frame header.
|
// 2. Read and parse first two bytes of frame header.
|
||||||
|
// To aid debugging, collect and report all errors in the first two bytes
|
||||||
|
// of the header.
|
||||||
|
|
||||||
|
var errors []string
|
||||||
|
|
||||||
p, err := c.read(2)
|
p, err := c.read(2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return noFrame, err
|
return noFrame, err
|
||||||
}
|
}
|
||||||
|
|
||||||
final := p[0]&finalBit != 0
|
|
||||||
frameType := int(p[0] & 0xf)
|
frameType := int(p[0] & 0xf)
|
||||||
|
final := p[0]&finalBit != 0
|
||||||
|
rsv1 := p[0]&rsv1Bit != 0
|
||||||
|
rsv2 := p[0]&rsv2Bit != 0
|
||||||
|
rsv3 := p[0]&rsv3Bit != 0
|
||||||
mask := p[1]&maskBit != 0
|
mask := p[1]&maskBit != 0
|
||||||
c.setReadRemaining(int64(p[1] & 0x7f))
|
c.setReadRemaining(int64(p[1] & 0x7f))
|
||||||
|
|
||||||
c.readDecompress = false
|
c.readDecompress = false
|
||||||
if c.newDecompressionReader != nil && (p[0]&rsv1Bit) != 0 {
|
if rsv1 {
|
||||||
c.readDecompress = true
|
if c.newDecompressionReader != nil {
|
||||||
p[0] &^= rsv1Bit
|
c.readDecompress = true
|
||||||
|
} else {
|
||||||
|
errors = append(errors, "RSV1 set")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if rsv := p[0] & (rsv1Bit | rsv2Bit | rsv3Bit); rsv != 0 {
|
if rsv2 {
|
||||||
return noFrame, c.handleProtocolError("unexpected reserved bits 0x" + strconv.FormatInt(int64(rsv), 16))
|
errors = append(errors, "RSV2 set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if rsv3 {
|
||||||
|
errors = append(errors, "RSV3 set")
|
||||||
}
|
}
|
||||||
|
|
||||||
switch frameType {
|
switch frameType {
|
||||||
case CloseMessage, PingMessage, PongMessage:
|
case CloseMessage, PingMessage, PongMessage:
|
||||||
if c.readRemaining > maxControlFramePayloadSize {
|
if c.readRemaining > maxControlFramePayloadSize {
|
||||||
return noFrame, c.handleProtocolError("control frame length > 125")
|
errors = append(errors, "len > 125 for control")
|
||||||
}
|
}
|
||||||
if !final {
|
if !final {
|
||||||
return noFrame, c.handleProtocolError("control frame not final")
|
errors = append(errors, "FIN not set on control")
|
||||||
}
|
}
|
||||||
case TextMessage, BinaryMessage:
|
case TextMessage, BinaryMessage:
|
||||||
if !c.readFinal {
|
if !c.readFinal {
|
||||||
return noFrame, c.handleProtocolError("message start before final message frame")
|
errors = append(errors, "data before FIN")
|
||||||
}
|
}
|
||||||
c.readFinal = final
|
c.readFinal = final
|
||||||
case continuationFrame:
|
case continuationFrame:
|
||||||
if c.readFinal {
|
if c.readFinal {
|
||||||
return noFrame, c.handleProtocolError("continuation after final message frame")
|
errors = append(errors, "continuation after FIN")
|
||||||
}
|
}
|
||||||
c.readFinal = final
|
c.readFinal = final
|
||||||
default:
|
default:
|
||||||
return noFrame, c.handleProtocolError("unknown opcode " + strconv.Itoa(frameType))
|
errors = append(errors, "bad opcode "+strconv.Itoa(frameType))
|
||||||
|
}
|
||||||
|
|
||||||
|
if mask != c.isServer {
|
||||||
|
errors = append(errors, "bad MASK")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(errors) > 0 {
|
||||||
|
return noFrame, c.handleProtocolError(strings.Join(errors, ", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Read and parse frame length as per
|
// 3. Read and parse frame length as per
|
||||||
@@ -872,10 +901,6 @@ func (c *Conn) advanceFrame() (int, error) {
|
|||||||
|
|
||||||
// 4. Handle frame masking.
|
// 4. Handle frame masking.
|
||||||
|
|
||||||
if mask != c.isServer {
|
|
||||||
return noFrame, c.handleProtocolError("incorrect mask flag")
|
|
||||||
}
|
|
||||||
|
|
||||||
if mask {
|
if mask {
|
||||||
c.readMaskPos = 0
|
c.readMaskPos = 0
|
||||||
p, err := c.read(len(c.readMaskKey))
|
p, err := c.read(len(c.readMaskKey))
|
||||||
@@ -935,7 +960,7 @@ func (c *Conn) advanceFrame() (int, error) {
|
|||||||
if len(payload) >= 2 {
|
if len(payload) >= 2 {
|
||||||
closeCode = int(binary.BigEndian.Uint16(payload))
|
closeCode = int(binary.BigEndian.Uint16(payload))
|
||||||
if !isValidReceivedCloseCode(closeCode) {
|
if !isValidReceivedCloseCode(closeCode) {
|
||||||
return noFrame, c.handleProtocolError("invalid close code")
|
return noFrame, c.handleProtocolError("bad close code " + strconv.Itoa(closeCode))
|
||||||
}
|
}
|
||||||
closeText = string(payload[2:])
|
closeText = string(payload[2:])
|
||||||
if !utf8.ValidString(closeText) {
|
if !utf8.ValidString(closeText) {
|
||||||
@@ -952,7 +977,11 @@ func (c *Conn) advanceFrame() (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Conn) handleProtocolError(message string) error {
|
func (c *Conn) handleProtocolError(message string) error {
|
||||||
c.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait))
|
data := FormatCloseMessage(CloseProtocolError, message)
|
||||||
|
if len(data) > maxControlFramePayloadSize {
|
||||||
|
data = data[:maxControlFramePayloadSize]
|
||||||
|
}
|
||||||
|
c.WriteControl(CloseMessage, data, time.Now().Add(writeWait))
|
||||||
return errors.New("websocket: " + message)
|
return errors.New("websocket: " + message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
vendor/github.com/gorilla/websocket/conn_write.go
сгенерированный
поставляемый
15
vendor/github.com/gorilla/websocket/conn_write.go
сгенерированный
поставляемый
@@ -1,15 +0,0 @@
|
|||||||
// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func (c *Conn) writeBufs(bufs ...[]byte) error {
|
|
||||||
b := net.Buffers(bufs)
|
|
||||||
_, err := b.WriteTo(c.conn)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
18
vendor/github.com/gorilla/websocket/conn_write_legacy.go
сгенерированный
поставляемый
18
vendor/github.com/gorilla/websocket/conn_write_legacy.go
сгенерированный
поставляемый
@@ -1,18 +0,0 @@
|
|||||||
// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
func (c *Conn) writeBufs(bufs ...[]byte) error {
|
|
||||||
for _, buf := range bufs {
|
|
||||||
if len(buf) > 0 {
|
|
||||||
if _, err := c.conn.Write(buf); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
1
vendor/github.com/gorilla/websocket/mask.go
сгенерированный
поставляемый
1
vendor/github.com/gorilla/websocket/mask.go
сгенерированный
поставляемый
@@ -2,6 +2,7 @@
|
|||||||
// this source code is governed by a BSD-style license that can be found in the
|
// this source code is governed by a BSD-style license that can be found in the
|
||||||
// LICENSE file.
|
// LICENSE file.
|
||||||
|
|
||||||
|
//go:build !appengine
|
||||||
// +build !appengine
|
// +build !appengine
|
||||||
|
|
||||||
package websocket
|
package websocket
|
||||||
|
|||||||
1
vendor/github.com/gorilla/websocket/mask_safe.go
сгенерированный
поставляемый
1
vendor/github.com/gorilla/websocket/mask_safe.go
сгенерированный
поставляемый
@@ -2,6 +2,7 @@
|
|||||||
// this source code is governed by a BSD-style license that can be found in the
|
// this source code is governed by a BSD-style license that can be found in the
|
||||||
// LICENSE file.
|
// LICENSE file.
|
||||||
|
|
||||||
|
//go:build appengine
|
||||||
// +build appengine
|
// +build appengine
|
||||||
|
|
||||||
package websocket
|
package websocket
|
||||||
|
|||||||
2
vendor/github.com/gorilla/websocket/proxy.go
сгенерированный
поставляемый
2
vendor/github.com/gorilla/websocket/proxy.go
сгенерированный
поставляемый
@@ -48,7 +48,7 @@ func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
connectReq := &http.Request{
|
connectReq := &http.Request{
|
||||||
Method: "CONNECT",
|
Method: http.MethodConnect,
|
||||||
URL: &url.URL{Opaque: addr},
|
URL: &url.URL{Opaque: addr},
|
||||||
Host: addr,
|
Host: addr,
|
||||||
Header: connectHeader,
|
Header: connectHeader,
|
||||||
|
|||||||
8
vendor/github.com/gorilla/websocket/server.go
сгенерированный
поставляемый
8
vendor/github.com/gorilla/websocket/server.go
сгенерированный
поставляемый
@@ -23,6 +23,8 @@ func (e HandshakeError) Error() string { return e.message }
|
|||||||
|
|
||||||
// Upgrader specifies parameters for upgrading an HTTP connection to a
|
// Upgrader specifies parameters for upgrading an HTTP connection to a
|
||||||
// WebSocket connection.
|
// WebSocket connection.
|
||||||
|
//
|
||||||
|
// It is safe to call Upgrader's methods concurrently.
|
||||||
type Upgrader struct {
|
type Upgrader struct {
|
||||||
// HandshakeTimeout specifies the duration for the handshake to complete.
|
// HandshakeTimeout specifies the duration for the handshake to complete.
|
||||||
HandshakeTimeout time.Duration
|
HandshakeTimeout time.Duration
|
||||||
@@ -115,8 +117,8 @@ func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header
|
|||||||
// Upgrade upgrades the HTTP server connection to the WebSocket protocol.
|
// Upgrade upgrades the HTTP server connection to the WebSocket protocol.
|
||||||
//
|
//
|
||||||
// The responseHeader is included in the response to the client's upgrade
|
// The responseHeader is included in the response to the client's upgrade
|
||||||
// request. Use the responseHeader to specify cookies (Set-Cookie) and the
|
// request. Use the responseHeader to specify cookies (Set-Cookie). To specify
|
||||||
// application negotiated subprotocol (Sec-WebSocket-Protocol).
|
// subprotocols supported by the server, set Upgrader.Subprotocols directly.
|
||||||
//
|
//
|
||||||
// If the upgrade fails, then Upgrade replies to the client with an HTTP error
|
// If the upgrade fails, then Upgrade replies to the client with an HTTP error
|
||||||
// response.
|
// response.
|
||||||
@@ -131,7 +133,7 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade
|
|||||||
return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header")
|
return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header")
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Method != "GET" {
|
if r.Method != http.MethodGet {
|
||||||
return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET")
|
return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
vendor/github.com/gorilla/websocket/tls_handshake.go
сгенерированный
поставляемый
Обычный файл
21
vendor/github.com/gorilla/websocket/tls_handshake.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,21 @@
|
|||||||
|
//go:build go1.17
|
||||||
|
// +build go1.17
|
||||||
|
|
||||||
|
package websocket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
|
)
|
||||||
|
|
||||||
|
func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error {
|
||||||
|
if err := tlsConn.HandshakeContext(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !cfg.InsecureSkipVerify {
|
||||||
|
if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
21
vendor/github.com/gorilla/websocket/tls_handshake_116.go
сгенерированный
поставляемый
Обычный файл
21
vendor/github.com/gorilla/websocket/tls_handshake_116.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,21 @@
|
|||||||
|
//go:build !go1.17
|
||||||
|
// +build !go1.17
|
||||||
|
|
||||||
|
package websocket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
|
)
|
||||||
|
|
||||||
|
func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error {
|
||||||
|
if err := tlsConn.Handshake(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !cfg.InsecureSkipVerify {
|
||||||
|
if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
19
vendor/github.com/gorilla/websocket/trace.go
сгенерированный
поставляемый
19
vendor/github.com/gorilla/websocket/trace.go
сгенерированный
поставляемый
@@ -1,19 +0,0 @@
|
|||||||
// +build go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/tls"
|
|
||||||
"net/http/httptrace"
|
|
||||||
)
|
|
||||||
|
|
||||||
func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error {
|
|
||||||
if trace.TLSHandshakeStart != nil {
|
|
||||||
trace.TLSHandshakeStart()
|
|
||||||
}
|
|
||||||
err := doHandshake(tlsConn, cfg)
|
|
||||||
if trace.TLSHandshakeDone != nil {
|
|
||||||
trace.TLSHandshakeDone(tlsConn.ConnectionState(), err)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
12
vendor/github.com/gorilla/websocket/trace_17.go
сгенерированный
поставляемый
12
vendor/github.com/gorilla/websocket/trace_17.go
сгенерированный
поставляемый
@@ -1,12 +0,0 @@
|
|||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package websocket
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/tls"
|
|
||||||
"net/http/httptrace"
|
|
||||||
)
|
|
||||||
|
|
||||||
func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error {
|
|
||||||
return doHandshake(tlsConn, cfg)
|
|
||||||
}
|
|
||||||
28
vendor/github.com/klauspost/compress/README.md
сгенерированный
поставляемый
28
vendor/github.com/klauspost/compress/README.md
сгенерированный
поставляемый
@@ -17,6 +17,19 @@ This package provides various compression algorithms.
|
|||||||
|
|
||||||
# changelog
|
# changelog
|
||||||
|
|
||||||
|
* Feb 17, 2022 (v1.14.3)
|
||||||
|
* flate: Improve fastest levels compression speed ~10% more throughput. [#482](https://github.com/klauspost/compress/pull/482) [#489](https://github.com/klauspost/compress/pull/489) [#490](https://github.com/klauspost/compress/pull/490) [#491](https://github.com/klauspost/compress/pull/491) [#494](https://github.com/klauspost/compress/pull/494) [#478](https://github.com/klauspost/compress/pull/478)
|
||||||
|
* flate: Faster decompression speed, ~5-10%. [#483](https://github.com/klauspost/compress/pull/483)
|
||||||
|
* s2: Faster compression with Go v1.18 and amd64 microarch level 3+. [#484](https://github.com/klauspost/compress/pull/484) [#486](https://github.com/klauspost/compress/pull/486)
|
||||||
|
|
||||||
|
* Jan 25, 2022 (v1.14.2)
|
||||||
|
* zstd: improve header decoder by @dsnet [#476](https://github.com/klauspost/compress/pull/476)
|
||||||
|
* zstd: Add bigger default blocks [#469](https://github.com/klauspost/compress/pull/469)
|
||||||
|
* zstd: Remove unused decompression buffer [#470](https://github.com/klauspost/compress/pull/470)
|
||||||
|
* zstd: Fix logically dead code by @ningmingxiao [#472](https://github.com/klauspost/compress/pull/472)
|
||||||
|
* flate: Improve level 7-9 [#471](https://github.com/klauspost/compress/pull/471) [#473](https://github.com/klauspost/compress/pull/473)
|
||||||
|
* zstd: Add noasm tag for xxhash [#475](https://github.com/klauspost/compress/pull/475)
|
||||||
|
|
||||||
* Jan 11, 2022 (v1.14.1)
|
* Jan 11, 2022 (v1.14.1)
|
||||||
* s2: Add stream index in [#462](https://github.com/klauspost/compress/pull/462)
|
* s2: Add stream index in [#462](https://github.com/klauspost/compress/pull/462)
|
||||||
* flate: Speed and efficiency improvements in [#439](https://github.com/klauspost/compress/pull/439) [#461](https://github.com/klauspost/compress/pull/461) [#455](https://github.com/klauspost/compress/pull/455) [#452](https://github.com/klauspost/compress/pull/452) [#458](https://github.com/klauspost/compress/pull/458)
|
* flate: Speed and efficiency improvements in [#439](https://github.com/klauspost/compress/pull/439) [#461](https://github.com/klauspost/compress/pull/461) [#455](https://github.com/klauspost/compress/pull/455) [#452](https://github.com/klauspost/compress/pull/452) [#458](https://github.com/klauspost/compress/pull/458)
|
||||||
@@ -53,6 +66,9 @@ This package provides various compression algorithms.
|
|||||||
* zstd: Detect short invalid signatures [#382](https://github.com/klauspost/compress/pull/382)
|
* zstd: Detect short invalid signatures [#382](https://github.com/klauspost/compress/pull/382)
|
||||||
* zstd: Spawn decoder goroutine only if needed. [#380](https://github.com/klauspost/compress/pull/380)
|
* zstd: Spawn decoder goroutine only if needed. [#380](https://github.com/klauspost/compress/pull/380)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>See changes to v1.12.x</summary>
|
||||||
|
|
||||||
* May 25, 2021 (v1.12.3)
|
* May 25, 2021 (v1.12.3)
|
||||||
* deflate: Better/faster Huffman encoding [#374](https://github.com/klauspost/compress/pull/374)
|
* deflate: Better/faster Huffman encoding [#374](https://github.com/klauspost/compress/pull/374)
|
||||||
* deflate: Allocate less for history. [#375](https://github.com/klauspost/compress/pull/375)
|
* deflate: Allocate less for history. [#375](https://github.com/klauspost/compress/pull/375)
|
||||||
@@ -74,9 +90,10 @@ This package provides various compression algorithms.
|
|||||||
* s2c/s2d/s2sx: Always truncate when writing files [#352](https://github.com/klauspost/compress/pull/352)
|
* s2c/s2d/s2sx: Always truncate when writing files [#352](https://github.com/klauspost/compress/pull/352)
|
||||||
* zstd: Reduce memory usage further when using [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) [#346](https://github.com/klauspost/compress/pull/346)
|
* zstd: Reduce memory usage further when using [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) [#346](https://github.com/klauspost/compress/pull/346)
|
||||||
* s2: Fix potential problem with amd64 assembly and profilers [#349](https://github.com/klauspost/compress/pull/349)
|
* s2: Fix potential problem with amd64 assembly and profilers [#349](https://github.com/klauspost/compress/pull/349)
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>See changes prior to v1.12.1</summary>
|
<summary>See changes to v1.11.x</summary>
|
||||||
|
|
||||||
* Mar 26, 2021 (v1.11.13)
|
* Mar 26, 2021 (v1.11.13)
|
||||||
* zstd: Big speedup on small dictionary encodes [#344](https://github.com/klauspost/compress/pull/344) [#345](https://github.com/klauspost/compress/pull/345)
|
* zstd: Big speedup on small dictionary encodes [#344](https://github.com/klauspost/compress/pull/344) [#345](https://github.com/klauspost/compress/pull/345)
|
||||||
@@ -135,7 +152,7 @@ This package provides various compression algorithms.
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>See changes prior to v1.11.0</summary>
|
<summary>See changes to v1.10.x</summary>
|
||||||
|
|
||||||
* July 8, 2020 (v1.10.11)
|
* July 8, 2020 (v1.10.11)
|
||||||
* zstd: Fix extra block when compressing with ReadFrom. [#278](https://github.com/klauspost/compress/pull/278)
|
* zstd: Fix extra block when compressing with ReadFrom. [#278](https://github.com/klauspost/compress/pull/278)
|
||||||
@@ -297,11 +314,6 @@ This package provides various compression algorithms.
|
|||||||
|
|
||||||
# deflate usage
|
# deflate usage
|
||||||
|
|
||||||
* [High Throughput Benchmark](http://blog.klauspost.com/go-gzipdeflate-benchmarks/).
|
|
||||||
* [Small Payload/Webserver Benchmarks](http://blog.klauspost.com/gzip-performance-for-go-webservers/).
|
|
||||||
* [Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/).
|
|
||||||
* [Re-balancing Deflate Compression Levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/)
|
|
||||||
|
|
||||||
The packages are drop-in replacements for standard libraries. Simply replace the import path to use them:
|
The packages are drop-in replacements for standard libraries. Simply replace the import path to use them:
|
||||||
|
|
||||||
| old import | new import | Documentation
|
| old import | new import | Documentation
|
||||||
@@ -323,6 +335,8 @@ Memory usage is typically 1MB for a Writer. stdlib is in the same range.
|
|||||||
If you expect to have a lot of concurrently allocated Writers consider using
|
If you expect to have a lot of concurrently allocated Writers consider using
|
||||||
the stateless compress described below.
|
the stateless compress described below.
|
||||||
|
|
||||||
|
For compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing).
|
||||||
|
|
||||||
# Stateless compression
|
# Stateless compression
|
||||||
|
|
||||||
This package offers stateless compression as a special option for gzip/deflate.
|
This package offers stateless compression as a special option for gzip/deflate.
|
||||||
|
|||||||
2
vendor/github.com/klauspost/compress/flate/fast_encoder.go
сгенерированный
поставляемый
2
vendor/github.com/klauspost/compress/flate/fast_encoder.go
сгенерированный
поставляемый
@@ -179,7 +179,7 @@ func (e *fastGen) matchlen(s, t int32, src []byte) int32 {
|
|||||||
// matchlenLong will return the match length between offsets and t in src.
|
// matchlenLong will return the match length between offsets and t in src.
|
||||||
// It is assumed that s > t, that t >=0 and s < len(src).
|
// It is assumed that s > t, that t >=0 and s < len(src).
|
||||||
func (e *fastGen) matchlenLong(s, t int32, src []byte) int32 {
|
func (e *fastGen) matchlenLong(s, t int32, src []byte) int32 {
|
||||||
if debugDecode {
|
if debugDeflate {
|
||||||
if t >= s {
|
if t >= s {
|
||||||
panic(fmt.Sprint("t >=s:", t, s))
|
panic(fmt.Sprint("t >=s:", t, s))
|
||||||
}
|
}
|
||||||
|
|||||||
166
vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go
сгенерированный
поставляемый
166
vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go
сгенерированный
поставляемый
@@ -8,6 +8,7 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"math"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -24,6 +25,10 @@ const (
|
|||||||
codegenCodeCount = 19
|
codegenCodeCount = 19
|
||||||
badCode = 255
|
badCode = 255
|
||||||
|
|
||||||
|
// maxPredefinedTokens is the maximum number of tokens
|
||||||
|
// where we check if fixed size is smaller.
|
||||||
|
maxPredefinedTokens = 250
|
||||||
|
|
||||||
// bufferFlushSize indicates the buffer size
|
// bufferFlushSize indicates the buffer size
|
||||||
// after which bytes are flushed to the writer.
|
// after which bytes are flushed to the writer.
|
||||||
// Should preferably be a multiple of 6, since
|
// Should preferably be a multiple of 6, since
|
||||||
@@ -36,8 +41,11 @@ const (
|
|||||||
bufferSize = bufferFlushSize + 8
|
bufferSize = bufferFlushSize + 8
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Minimum length code that emits bits.
|
||||||
|
const lengthExtraBitsMinCode = 8
|
||||||
|
|
||||||
// The number of extra bits needed by length code X - LENGTH_CODES_START.
|
// The number of extra bits needed by length code X - LENGTH_CODES_START.
|
||||||
var lengthExtraBits = [32]int8{
|
var lengthExtraBits = [32]uint8{
|
||||||
/* 257 */ 0, 0, 0,
|
/* 257 */ 0, 0, 0,
|
||||||
/* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2,
|
/* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2,
|
||||||
/* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,
|
/* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,
|
||||||
@@ -51,6 +59,9 @@ var lengthBase = [32]uint8{
|
|||||||
64, 80, 96, 112, 128, 160, 192, 224, 255,
|
64, 80, 96, 112, 128, 160, 192, 224, 255,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Minimum offset code that emits bits.
|
||||||
|
const offsetExtraBitsMinCode = 4
|
||||||
|
|
||||||
// offset code word extra bits.
|
// offset code word extra bits.
|
||||||
var offsetExtraBits = [32]int8{
|
var offsetExtraBits = [32]int8{
|
||||||
0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
|
0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
|
||||||
@@ -78,10 +89,10 @@ func init() {
|
|||||||
|
|
||||||
for i := range offsetCombined[:] {
|
for i := range offsetCombined[:] {
|
||||||
// Don't use extended window values...
|
// Don't use extended window values...
|
||||||
if offsetBase[i] > 0x006000 {
|
if offsetExtraBits[i] == 0 || offsetBase[i] > 0x006000 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
offsetCombined[i] = uint32(offsetExtraBits[i])<<16 | (offsetBase[i])
|
offsetCombined[i] = uint32(offsetExtraBits[i]) | (offsetBase[i] << 8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +108,7 @@ type huffmanBitWriter struct {
|
|||||||
// Data waiting to be written is bytes[0:nbytes]
|
// Data waiting to be written is bytes[0:nbytes]
|
||||||
// and then the low nbits of bits.
|
// and then the low nbits of bits.
|
||||||
bits uint64
|
bits uint64
|
||||||
nbits uint16
|
nbits uint8
|
||||||
nbytes uint8
|
nbytes uint8
|
||||||
lastHuffMan bool
|
lastHuffMan bool
|
||||||
literalEncoding *huffmanEncoder
|
literalEncoding *huffmanEncoder
|
||||||
@@ -215,7 +226,7 @@ func (w *huffmanBitWriter) write(b []byte) {
|
|||||||
_, w.err = w.writer.Write(b)
|
_, w.err = w.writer.Write(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *huffmanBitWriter) writeBits(b int32, nb uint16) {
|
func (w *huffmanBitWriter) writeBits(b int32, nb uint8) {
|
||||||
w.bits |= uint64(b) << (w.nbits & 63)
|
w.bits |= uint64(b) << (w.nbits & 63)
|
||||||
w.nbits += nb
|
w.nbits += nb
|
||||||
if w.nbits >= 48 {
|
if w.nbits >= 48 {
|
||||||
@@ -571,7 +582,10 @@ func (w *huffmanBitWriter) writeBlock(tokens *tokens, eof bool, input []byte) {
|
|||||||
// Fixed Huffman baseline.
|
// Fixed Huffman baseline.
|
||||||
var literalEncoding = fixedLiteralEncoding
|
var literalEncoding = fixedLiteralEncoding
|
||||||
var offsetEncoding = fixedOffsetEncoding
|
var offsetEncoding = fixedOffsetEncoding
|
||||||
var size = w.fixedSize(extraBits)
|
var size = math.MaxInt32
|
||||||
|
if tokens.n < maxPredefinedTokens {
|
||||||
|
size = w.fixedSize(extraBits)
|
||||||
|
}
|
||||||
|
|
||||||
// Dynamic Huffman?
|
// Dynamic Huffman?
|
||||||
var numCodegens int
|
var numCodegens int
|
||||||
@@ -672,19 +686,21 @@ func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []b
|
|||||||
size = reuseSize
|
size = reuseSize
|
||||||
}
|
}
|
||||||
|
|
||||||
if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size {
|
if tokens.n < maxPredefinedTokens {
|
||||||
// Check if we get a reasonable size decrease.
|
if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size {
|
||||||
if storable && ssize <= size {
|
// Check if we get a reasonable size decrease.
|
||||||
w.writeStoredHeader(len(input), eof)
|
if storable && ssize <= size {
|
||||||
w.writeBytes(input)
|
w.writeStoredHeader(len(input), eof)
|
||||||
|
w.writeBytes(input)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.writeFixedHeader(eof)
|
||||||
|
if !sync {
|
||||||
|
tokens.AddEOB()
|
||||||
|
}
|
||||||
|
w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.writeFixedHeader(eof)
|
|
||||||
if !sync {
|
|
||||||
tokens.AddEOB()
|
|
||||||
}
|
|
||||||
w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
// Check if we get a reasonable size decrease.
|
// Check if we get a reasonable size decrease.
|
||||||
if storable && ssize <= size {
|
if storable && ssize <= size {
|
||||||
@@ -717,19 +733,21 @@ func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []b
|
|||||||
size, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits)
|
size, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits)
|
||||||
|
|
||||||
// Store predefined, if we don't get a reasonable improvement.
|
// Store predefined, if we don't get a reasonable improvement.
|
||||||
if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size {
|
if tokens.n < maxPredefinedTokens {
|
||||||
// Store bytes, if we don't get an improvement.
|
if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size {
|
||||||
if storable && ssize <= preSize {
|
// Store bytes, if we don't get an improvement.
|
||||||
w.writeStoredHeader(len(input), eof)
|
if storable && ssize <= preSize {
|
||||||
w.writeBytes(input)
|
w.writeStoredHeader(len(input), eof)
|
||||||
|
w.writeBytes(input)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.writeFixedHeader(eof)
|
||||||
|
if !sync {
|
||||||
|
tokens.AddEOB()
|
||||||
|
}
|
||||||
|
w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.writeFixedHeader(eof)
|
|
||||||
if !sync {
|
|
||||||
tokens.AddEOB()
|
|
||||||
}
|
|
||||||
w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if storable && ssize <= size {
|
if storable && ssize <= size {
|
||||||
@@ -833,9 +851,9 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
|
|||||||
bits, nbits, nbytes := w.bits, w.nbits, w.nbytes
|
bits, nbits, nbytes := w.bits, w.nbits, w.nbytes
|
||||||
|
|
||||||
for _, t := range tokens {
|
for _, t := range tokens {
|
||||||
if t < matchType {
|
if t < 256 {
|
||||||
//w.writeCode(lits[t.literal()])
|
//w.writeCode(lits[t.literal()])
|
||||||
c := lits[t.literal()]
|
c := lits[t]
|
||||||
bits |= uint64(c.code) << (nbits & 63)
|
bits |= uint64(c.code) << (nbits & 63)
|
||||||
nbits += c.len
|
nbits += c.len
|
||||||
if nbits >= 48 {
|
if nbits >= 48 {
|
||||||
@@ -858,12 +876,12 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
|
|||||||
|
|
||||||
// Write the length
|
// Write the length
|
||||||
length := t.length()
|
length := t.length()
|
||||||
lengthCode := lengthCode(length)
|
lengthCode := lengthCode(length) & 31
|
||||||
if false {
|
if false {
|
||||||
w.writeCode(lengths[lengthCode&31])
|
w.writeCode(lengths[lengthCode])
|
||||||
} else {
|
} else {
|
||||||
// inlined
|
// inlined
|
||||||
c := lengths[lengthCode&31]
|
c := lengths[lengthCode]
|
||||||
bits |= uint64(c.code) << (nbits & 63)
|
bits |= uint64(c.code) << (nbits & 63)
|
||||||
nbits += c.len
|
nbits += c.len
|
||||||
if nbits >= 48 {
|
if nbits >= 48 {
|
||||||
@@ -883,10 +901,10 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extraLengthBits := uint16(lengthExtraBits[lengthCode&31])
|
if lengthCode >= lengthExtraBitsMinCode {
|
||||||
if extraLengthBits > 0 {
|
extraLengthBits := lengthExtraBits[lengthCode]
|
||||||
//w.writeBits(extraLength, extraLengthBits)
|
//w.writeBits(extraLength, extraLengthBits)
|
||||||
extraLength := int32(length - lengthBase[lengthCode&31])
|
extraLength := int32(length - lengthBase[lengthCode])
|
||||||
bits |= uint64(extraLength) << (nbits & 63)
|
bits |= uint64(extraLength) << (nbits & 63)
|
||||||
nbits += extraLengthBits
|
nbits += extraLengthBits
|
||||||
if nbits >= 48 {
|
if nbits >= 48 {
|
||||||
@@ -907,10 +925,9 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
|
|||||||
}
|
}
|
||||||
// Write the offset
|
// Write the offset
|
||||||
offset := t.offset()
|
offset := t.offset()
|
||||||
offsetCode := offset >> 16
|
offsetCode := (offset >> 16) & 31
|
||||||
offset &= matchOffsetOnlyMask
|
|
||||||
if false {
|
if false {
|
||||||
w.writeCode(offs[offsetCode&31])
|
w.writeCode(offs[offsetCode])
|
||||||
} else {
|
} else {
|
||||||
// inlined
|
// inlined
|
||||||
c := offs[offsetCode]
|
c := offs[offsetCode]
|
||||||
@@ -932,11 +949,12 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
offsetComb := offsetCombined[offsetCode]
|
|
||||||
if offsetComb > 1<<16 {
|
if offsetCode >= offsetExtraBitsMinCode {
|
||||||
|
offsetComb := offsetCombined[offsetCode]
|
||||||
//w.writeBits(extraOffset, extraOffsetBits)
|
//w.writeBits(extraOffset, extraOffsetBits)
|
||||||
bits |= uint64(offset-(offsetComb&0xffff)) << (nbits & 63)
|
bits |= uint64((offset-(offsetComb>>8))&matchOffsetOnlyMask) << (nbits & 63)
|
||||||
nbits += uint16(offsetComb >> 16)
|
nbits += uint8(offsetComb)
|
||||||
if nbits >= 48 {
|
if nbits >= 48 {
|
||||||
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
||||||
//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits
|
//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits
|
||||||
@@ -1002,6 +1020,29 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
// https://stackoverflow.com/a/25454430
|
// https://stackoverflow.com/a/25454430
|
||||||
const guessHeaderSizeBits = 70 * 8
|
const guessHeaderSizeBits = 70 * 8
|
||||||
histogram(input, w.literalFreq[:numLiterals], fill)
|
histogram(input, w.literalFreq[:numLiterals], fill)
|
||||||
|
ssize, storable := w.storedSize(input)
|
||||||
|
if storable && len(input) > 1024 {
|
||||||
|
// Quick check for incompressible content.
|
||||||
|
abs := float64(0)
|
||||||
|
avg := float64(len(input)) / 256
|
||||||
|
max := float64(len(input) * 2)
|
||||||
|
for _, v := range w.literalFreq[:256] {
|
||||||
|
diff := float64(v) - avg
|
||||||
|
abs += diff * diff
|
||||||
|
if abs > max {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if abs < max {
|
||||||
|
if debugDeflate {
|
||||||
|
fmt.Println("stored", abs, "<", max)
|
||||||
|
}
|
||||||
|
// No chance we can compress this...
|
||||||
|
w.writeStoredHeader(len(input), eof)
|
||||||
|
w.writeBytes(input)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
w.literalFreq[endBlockMarker] = 1
|
w.literalFreq[endBlockMarker] = 1
|
||||||
w.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15)
|
w.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15)
|
||||||
if fill {
|
if fill {
|
||||||
@@ -1019,8 +1060,10 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
estBits += estBits >> w.logNewTablePenalty
|
estBits += estBits >> w.logNewTablePenalty
|
||||||
|
|
||||||
// Store bytes, if we don't get a reasonable improvement.
|
// Store bytes, if we don't get a reasonable improvement.
|
||||||
ssize, storable := w.storedSize(input)
|
|
||||||
if storable && ssize <= estBits {
|
if storable && ssize <= estBits {
|
||||||
|
if debugDeflate {
|
||||||
|
fmt.Println("stored,", ssize, "<=", estBits)
|
||||||
|
}
|
||||||
w.writeStoredHeader(len(input), eof)
|
w.writeStoredHeader(len(input), eof)
|
||||||
w.writeBytes(input)
|
w.writeBytes(input)
|
||||||
return
|
return
|
||||||
@@ -1031,7 +1074,7 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
|
|
||||||
if estBits < reuseSize {
|
if estBits < reuseSize {
|
||||||
if debugDeflate {
|
if debugDeflate {
|
||||||
//fmt.Println("not reusing, reuse:", reuseSize/8, "> new:", estBits/8, "- header est:", w.lastHeader/8)
|
fmt.Println("NOT reusing, reuse:", reuseSize/8, "> new:", estBits/8, "header est:", w.lastHeader/8, "bytes")
|
||||||
}
|
}
|
||||||
// We owe an EOB
|
// We owe an EOB
|
||||||
w.writeCode(w.literalEncoding.codes[endBlockMarker])
|
w.writeCode(w.literalEncoding.codes[endBlockMarker])
|
||||||
@@ -1065,6 +1108,9 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
// Go 1.16 LOVES having these on stack. At least 1.5x the speed.
|
// Go 1.16 LOVES having these on stack. At least 1.5x the speed.
|
||||||
bits, nbits, nbytes := w.bits, w.nbits, w.nbytes
|
bits, nbits, nbytes := w.bits, w.nbits, w.nbytes
|
||||||
|
|
||||||
|
if debugDeflate {
|
||||||
|
count -= int(nbytes)*8 + int(nbits)
|
||||||
|
}
|
||||||
// Unroll, write 3 codes/loop.
|
// Unroll, write 3 codes/loop.
|
||||||
// Fastest number of unrolls.
|
// Fastest number of unrolls.
|
||||||
for len(input) > 3 {
|
for len(input) > 3 {
|
||||||
@@ -1074,13 +1120,16 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
||||||
bits >>= (n * 8) & 63
|
bits >>= (n * 8) & 63
|
||||||
nbits -= n * 8
|
nbits -= n * 8
|
||||||
nbytes += uint8(n)
|
nbytes += n
|
||||||
}
|
}
|
||||||
if nbytes >= bufferFlushSize {
|
if nbytes >= bufferFlushSize {
|
||||||
if w.err != nil {
|
if w.err != nil {
|
||||||
nbytes = 0
|
nbytes = 0
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if debugDeflate {
|
||||||
|
count += int(nbytes) * 8
|
||||||
|
}
|
||||||
_, w.err = w.writer.Write(w.bytes[:nbytes])
|
_, w.err = w.writer.Write(w.bytes[:nbytes])
|
||||||
nbytes = 0
|
nbytes = 0
|
||||||
}
|
}
|
||||||
@@ -1096,13 +1145,6 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
|
|
||||||
// Remaining...
|
// Remaining...
|
||||||
for _, t := range input {
|
for _, t := range input {
|
||||||
// Bitwriting inlined, ~30% speedup
|
|
||||||
c := encoding[t]
|
|
||||||
bits |= uint64(c.code) << (nbits & 63)
|
|
||||||
nbits += c.len
|
|
||||||
if debugDeflate {
|
|
||||||
count += int(c.len)
|
|
||||||
}
|
|
||||||
if nbits >= 48 {
|
if nbits >= 48 {
|
||||||
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)
|
||||||
//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits
|
//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits
|
||||||
@@ -1114,17 +1156,33 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {
|
|||||||
nbytes = 0
|
nbytes = 0
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if debugDeflate {
|
||||||
|
count += int(nbytes) * 8
|
||||||
|
}
|
||||||
_, w.err = w.writer.Write(w.bytes[:nbytes])
|
_, w.err = w.writer.Write(w.bytes[:nbytes])
|
||||||
nbytes = 0
|
nbytes = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Bitwriting inlined, ~30% speedup
|
||||||
|
c := encoding[t]
|
||||||
|
bits |= uint64(c.code) << (nbits & 63)
|
||||||
|
nbits += c.len
|
||||||
|
if debugDeflate {
|
||||||
|
count += int(c.len)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Restore...
|
// Restore...
|
||||||
w.bits, w.nbits, w.nbytes = bits, nbits, nbytes
|
w.bits, w.nbits, w.nbytes = bits, nbits, nbytes
|
||||||
|
|
||||||
if debugDeflate {
|
if debugDeflate {
|
||||||
fmt.Println("wrote", count/8, "bytes")
|
nb := count + int(nbytes)*8 + int(nbits)
|
||||||
|
fmt.Println("wrote", nb, "bits,", nb/8, "bytes.")
|
||||||
}
|
}
|
||||||
|
// Flush if needed to have space.
|
||||||
|
if w.nbits >= 48 {
|
||||||
|
w.writeOutBits()
|
||||||
|
}
|
||||||
|
|
||||||
if eof || sync {
|
if eof || sync {
|
||||||
w.writeCode(w.literalEncoding.codes[endBlockMarker])
|
w.writeCode(w.literalEncoding.codes[endBlockMarker])
|
||||||
w.lastHeader = 0
|
w.lastHeader = 0
|
||||||
|
|||||||
40
vendor/github.com/klauspost/compress/flate/huffman_code.go
сгенерированный
поставляемый
40
vendor/github.com/klauspost/compress/flate/huffman_code.go
сгенерированный
поставляемый
@@ -17,7 +17,8 @@ const (
|
|||||||
|
|
||||||
// hcode is a huffman code with a bit code and bit length.
|
// hcode is a huffman code with a bit code and bit length.
|
||||||
type hcode struct {
|
type hcode struct {
|
||||||
code, len uint16
|
code uint16
|
||||||
|
len uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
type huffmanEncoder struct {
|
type huffmanEncoder struct {
|
||||||
@@ -56,7 +57,7 @@ type levelInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set sets the code and length of an hcode.
|
// set sets the code and length of an hcode.
|
||||||
func (h *hcode) set(code uint16, length uint16) {
|
func (h *hcode) set(code uint16, length uint8) {
|
||||||
h.len = length
|
h.len = length
|
||||||
h.code = code
|
h.code = code
|
||||||
}
|
}
|
||||||
@@ -80,7 +81,7 @@ func generateFixedLiteralEncoding() *huffmanEncoder {
|
|||||||
var ch uint16
|
var ch uint16
|
||||||
for ch = 0; ch < literalCount; ch++ {
|
for ch = 0; ch < literalCount; ch++ {
|
||||||
var bits uint16
|
var bits uint16
|
||||||
var size uint16
|
var size uint8
|
||||||
switch {
|
switch {
|
||||||
case ch < 144:
|
case ch < 144:
|
||||||
// size 8, 000110000 .. 10111111
|
// size 8, 000110000 .. 10111111
|
||||||
@@ -99,7 +100,7 @@ func generateFixedLiteralEncoding() *huffmanEncoder {
|
|||||||
bits = ch + 192 - 280
|
bits = ch + 192 - 280
|
||||||
size = 8
|
size = 8
|
||||||
}
|
}
|
||||||
codes[ch] = hcode{code: reverseBits(bits, byte(size)), len: size}
|
codes[ch] = hcode{code: reverseBits(bits, size), len: size}
|
||||||
}
|
}
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
@@ -187,14 +188,19 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 {
|
|||||||
// of the level j ancestor.
|
// of the level j ancestor.
|
||||||
var leafCounts [maxBitsLimit][maxBitsLimit]int32
|
var leafCounts [maxBitsLimit][maxBitsLimit]int32
|
||||||
|
|
||||||
|
// Descending to only have 1 bounds check.
|
||||||
|
l2f := int32(list[2].freq)
|
||||||
|
l1f := int32(list[1].freq)
|
||||||
|
l0f := int32(list[0].freq) + int32(list[1].freq)
|
||||||
|
|
||||||
for level := int32(1); level <= maxBits; level++ {
|
for level := int32(1); level <= maxBits; level++ {
|
||||||
// For every level, the first two items are the first two characters.
|
// For every level, the first two items are the first two characters.
|
||||||
// We initialize the levels as if we had already figured this out.
|
// We initialize the levels as if we had already figured this out.
|
||||||
levels[level] = levelInfo{
|
levels[level] = levelInfo{
|
||||||
level: level,
|
level: level,
|
||||||
lastFreq: int32(list[1].freq),
|
lastFreq: l1f,
|
||||||
nextCharFreq: int32(list[2].freq),
|
nextCharFreq: l2f,
|
||||||
nextPairFreq: int32(list[0].freq) + int32(list[1].freq),
|
nextPairFreq: l0f,
|
||||||
}
|
}
|
||||||
leafCounts[level][level] = 2
|
leafCounts[level][level] = 2
|
||||||
if level == 1 {
|
if level == 1 {
|
||||||
@@ -205,8 +211,8 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 {
|
|||||||
// We need a total of 2*n - 2 items at top level and have already generated 2.
|
// We need a total of 2*n - 2 items at top level and have already generated 2.
|
||||||
levels[maxBits].needed = 2*n - 4
|
levels[maxBits].needed = 2*n - 4
|
||||||
|
|
||||||
level := maxBits
|
level := uint32(maxBits)
|
||||||
for {
|
for level < 16 {
|
||||||
l := &levels[level]
|
l := &levels[level]
|
||||||
if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 {
|
if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 {
|
||||||
// We've run out of both leafs and pairs.
|
// We've run out of both leafs and pairs.
|
||||||
@@ -238,7 +244,13 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 {
|
|||||||
// more values in the level below
|
// more values in the level below
|
||||||
l.lastFreq = l.nextPairFreq
|
l.lastFreq = l.nextPairFreq
|
||||||
// Take leaf counts from the lower level, except counts[level] remains the same.
|
// Take leaf counts from the lower level, except counts[level] remains the same.
|
||||||
copy(leafCounts[level][:level], leafCounts[level-1][:level])
|
if true {
|
||||||
|
save := leafCounts[level][level]
|
||||||
|
leafCounts[level] = leafCounts[level-1]
|
||||||
|
leafCounts[level][level] = save
|
||||||
|
} else {
|
||||||
|
copy(leafCounts[level][:level], leafCounts[level-1][:level])
|
||||||
|
}
|
||||||
levels[l.level-1].needed = 2
|
levels[l.level-1].needed = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,7 +308,7 @@ func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalN
|
|||||||
|
|
||||||
sortByLiteral(chunk)
|
sortByLiteral(chunk)
|
||||||
for _, node := range chunk {
|
for _, node := range chunk {
|
||||||
h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint16(n)}
|
h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint8(n)}
|
||||||
code++
|
code++
|
||||||
}
|
}
|
||||||
list = list[0 : len(list)-int(bits)]
|
list = list[0 : len(list)-int(bits)]
|
||||||
@@ -309,6 +321,7 @@ func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalN
|
|||||||
// maxBits The maximum number of bits to use for any literal.
|
// maxBits The maximum number of bits to use for any literal.
|
||||||
func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) {
|
func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) {
|
||||||
list := h.freqcache[:len(freq)+1]
|
list := h.freqcache[:len(freq)+1]
|
||||||
|
codes := h.codes[:len(freq)]
|
||||||
// Number of non-zero literals
|
// Number of non-zero literals
|
||||||
count := 0
|
count := 0
|
||||||
// Set list to be the set of all non-zero literals and their frequencies
|
// Set list to be the set of all non-zero literals and their frequencies
|
||||||
@@ -317,11 +330,10 @@ func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) {
|
|||||||
list[count] = literalNode{uint16(i), f}
|
list[count] = literalNode{uint16(i), f}
|
||||||
count++
|
count++
|
||||||
} else {
|
} else {
|
||||||
list[count] = literalNode{}
|
codes[i].len = 0
|
||||||
h.codes[i].len = 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list[len(freq)] = literalNode{}
|
list[count] = literalNode{}
|
||||||
|
|
||||||
list = list[:count]
|
list = list[:count]
|
||||||
if count <= 2 {
|
if count <= 2 {
|
||||||
|
|||||||
222
vendor/github.com/klauspost/compress/flate/inflate.go
сгенерированный
поставляемый
222
vendor/github.com/klauspost/compress/flate/inflate.go
сгенерированный
поставляемый
@@ -36,6 +36,13 @@ type lengthExtra struct {
|
|||||||
|
|
||||||
var decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}}
|
var decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}}
|
||||||
|
|
||||||
|
var bitMask32 = [32]uint32{
|
||||||
|
0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF,
|
||||||
|
0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,
|
||||||
|
0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF,
|
||||||
|
0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF,
|
||||||
|
} // up to 32 bits
|
||||||
|
|
||||||
// Initialize the fixedHuffmanDecoder only once upon first use.
|
// Initialize the fixedHuffmanDecoder only once upon first use.
|
||||||
var fixedOnce sync.Once
|
var fixedOnce sync.Once
|
||||||
var fixedHuffmanDecoder huffmanDecoder
|
var fixedHuffmanDecoder huffmanDecoder
|
||||||
@@ -559,221 +566,6 @@ func (f *decompressor) readHuffman() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode a single Huffman block from f.
|
|
||||||
// hl and hd are the Huffman states for the lit/length values
|
|
||||||
// and the distance values, respectively. If hd == nil, using the
|
|
||||||
// fixed distance encoding associated with fixed Huffman blocks.
|
|
||||||
func (f *decompressor) huffmanBlockGeneric() {
|
|
||||||
const (
|
|
||||||
stateInit = iota // Zero value must be stateInit
|
|
||||||
stateDict
|
|
||||||
)
|
|
||||||
|
|
||||||
switch f.stepState {
|
|
||||||
case stateInit:
|
|
||||||
goto readLiteral
|
|
||||||
case stateDict:
|
|
||||||
goto copyHistory
|
|
||||||
}
|
|
||||||
|
|
||||||
readLiteral:
|
|
||||||
// Read literal and/or (length, distance) according to RFC section 3.2.3.
|
|
||||||
{
|
|
||||||
var v int
|
|
||||||
{
|
|
||||||
// Inlined v, err := f.huffSym(f.hl)
|
|
||||||
// Since a huffmanDecoder can be empty or be composed of a degenerate tree
|
|
||||||
// with single element, huffSym must error on these two edge cases. In both
|
|
||||||
// cases, the chunks slice will be 0 for the invalid sequence, leading it
|
|
||||||
// satisfy the n == 0 check below.
|
|
||||||
n := uint(f.hl.maxRead)
|
|
||||||
// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,
|
|
||||||
// but is smart enough to keep local variables in registers, so use nb and b,
|
|
||||||
// inline call to moreBits and reassign b,nb back to f on return.
|
|
||||||
nb, b := f.nb, f.b
|
|
||||||
for {
|
|
||||||
for nb < n {
|
|
||||||
c, err := f.r.ReadByte()
|
|
||||||
if err != nil {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
f.err = noEOF(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.roffset++
|
|
||||||
b |= uint32(c) << (nb & regSizeMaskUint32)
|
|
||||||
nb += 8
|
|
||||||
}
|
|
||||||
chunk := f.hl.chunks[b&(huffmanNumChunks-1)]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
if n > huffmanChunkBits {
|
|
||||||
chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask]
|
|
||||||
n = uint(chunk & huffmanCountMask)
|
|
||||||
}
|
|
||||||
if n <= nb {
|
|
||||||
if n == 0 {
|
|
||||||
f.b = b
|
|
||||||
f.nb = nb
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("huffsym: n==0")
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.b = b >> (n & regSizeMaskUint32)
|
|
||||||
f.nb = nb - n
|
|
||||||
v = int(chunk >> huffmanValueShift)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var n uint // number of bits extra
|
|
||||||
var length int
|
|
||||||
var err error
|
|
||||||
switch {
|
|
||||||
case v < 256:
|
|
||||||
f.dict.writeByte(byte(v))
|
|
||||||
if f.dict.availWrite() == 0 {
|
|
||||||
f.toRead = f.dict.readFlush()
|
|
||||||
f.step = (*decompressor).huffmanBlockGeneric
|
|
||||||
f.stepState = stateInit
|
|
||||||
return
|
|
||||||
}
|
|
||||||
goto readLiteral
|
|
||||||
case v == 256:
|
|
||||||
f.finishBlock()
|
|
||||||
return
|
|
||||||
// otherwise, reference to older data
|
|
||||||
case v < 265:
|
|
||||||
length = v - (257 - 3)
|
|
||||||
n = 0
|
|
||||||
case v < 269:
|
|
||||||
length = v*2 - (265*2 - 11)
|
|
||||||
n = 1
|
|
||||||
case v < 273:
|
|
||||||
length = v*4 - (269*4 - 19)
|
|
||||||
n = 2
|
|
||||||
case v < 277:
|
|
||||||
length = v*8 - (273*8 - 35)
|
|
||||||
n = 3
|
|
||||||
case v < 281:
|
|
||||||
length = v*16 - (277*16 - 67)
|
|
||||||
n = 4
|
|
||||||
case v < 285:
|
|
||||||
length = v*32 - (281*32 - 131)
|
|
||||||
n = 5
|
|
||||||
case v < maxNumLit:
|
|
||||||
length = 258
|
|
||||||
n = 0
|
|
||||||
default:
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println(v, ">= maxNumLit")
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if n > 0 {
|
|
||||||
for f.nb < n {
|
|
||||||
if err = f.moreBits(); err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits n>0:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1))
|
|
||||||
f.b >>= n & regSizeMaskUint32
|
|
||||||
f.nb -= n
|
|
||||||
}
|
|
||||||
|
|
||||||
var dist uint32
|
|
||||||
if f.hd == nil {
|
|
||||||
for f.nb < 5 {
|
|
||||||
if err = f.moreBits(); err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits f.nb<5:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3)))
|
|
||||||
f.b >>= 5
|
|
||||||
f.nb -= 5
|
|
||||||
} else {
|
|
||||||
sym, err := f.huffSym(f.hd)
|
|
||||||
if err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("huffsym:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dist = uint32(sym)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case dist < 4:
|
|
||||||
dist++
|
|
||||||
case dist < maxNumDist:
|
|
||||||
nb := uint(dist-2) >> 1
|
|
||||||
// have 1 bit in bottom of dist, need nb more.
|
|
||||||
extra := (dist & 1) << (nb & regSizeMaskUint32)
|
|
||||||
for f.nb < nb {
|
|
||||||
if err = f.moreBits(); err != nil {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("morebits f.nb<nb:", err)
|
|
||||||
}
|
|
||||||
f.err = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
extra |= f.b & uint32(1<<(nb®SizeMaskUint32)-1)
|
|
||||||
f.b >>= nb & regSizeMaskUint32
|
|
||||||
f.nb -= nb
|
|
||||||
dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra
|
|
||||||
default:
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("dist too big:", dist, maxNumDist)
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// No check on length; encoding can be prescient.
|
|
||||||
if dist > uint32(f.dict.histSize()) {
|
|
||||||
if debugDecode {
|
|
||||||
fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize())
|
|
||||||
}
|
|
||||||
f.err = CorruptInputError(f.roffset)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
f.copyLen, f.copyDist = length, int(dist)
|
|
||||||
goto copyHistory
|
|
||||||
}
|
|
||||||
|
|
||||||
copyHistory:
|
|
||||||
// Perform a backwards copy according to RFC section 3.2.3.
|
|
||||||
{
|
|
||||||
cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen)
|
|
||||||
if cnt == 0 {
|
|
||||||
cnt = f.dict.writeCopy(f.copyDist, f.copyLen)
|
|
||||||
}
|
|
||||||
f.copyLen -= cnt
|
|
||||||
|
|
||||||
if f.dict.availWrite() == 0 || f.copyLen > 0 {
|
|
||||||
f.toRead = f.dict.readFlush()
|
|
||||||
f.step = (*decompressor).huffmanBlockGeneric // We need to continue this work
|
|
||||||
f.stepState = stateDict
|
|
||||||
return
|
|
||||||
}
|
|
||||||
goto readLiteral
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy a single uncompressed data block from input to output.
|
// Copy a single uncompressed data block from input to output.
|
||||||
func (f *decompressor) dataBlock() {
|
func (f *decompressor) dataBlock() {
|
||||||
// Uncompressed.
|
// Uncompressed.
|
||||||
|
|||||||
659
vendor/github.com/klauspost/compress/flate/inflate_gen.go
сгенерированный
поставляемый
659
vendor/github.com/klauspost/compress/flate/inflate_gen.go
сгенерированный
поставляемый
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
56
vendor/github.com/klauspost/compress/flate/level1.go
сгенерированный
поставляемый
56
vendor/github.com/klauspost/compress/flate/level1.go
сгенерированный
поставляемый
@@ -1,6 +1,10 @@
|
|||||||
package flate
|
package flate
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
"math/bits"
|
||||||
|
)
|
||||||
|
|
||||||
// fastGen maintains the table for matches,
|
// fastGen maintains the table for matches,
|
||||||
// and the previous byte block for level 2.
|
// and the previous byte block for level 2.
|
||||||
@@ -116,7 +120,32 @@ func (e *fastEncL1) Encode(dst *tokens, src []byte) {
|
|||||||
|
|
||||||
// Extend the 4-byte match as long as possible.
|
// Extend the 4-byte match as long as possible.
|
||||||
t := candidate.offset - e.cur
|
t := candidate.offset - e.cur
|
||||||
l := e.matchlenLong(s+4, t+4, src) + 4
|
var l = int32(4)
|
||||||
|
if false {
|
||||||
|
l = e.matchlenLong(s+4, t+4, src) + 4
|
||||||
|
} else {
|
||||||
|
// inlined:
|
||||||
|
a := src[s+4:]
|
||||||
|
b := src[t+4:]
|
||||||
|
for len(a) >= 8 {
|
||||||
|
if diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b); diff != 0 {
|
||||||
|
l += int32(bits.TrailingZeros64(diff) >> 3)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
l += 8
|
||||||
|
a = a[8:]
|
||||||
|
b = b[8:]
|
||||||
|
}
|
||||||
|
if len(a) < 8 {
|
||||||
|
b = b[:len(a)]
|
||||||
|
for i := range a {
|
||||||
|
if a[i] != b[i] {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
l++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Extend backwards
|
// Extend backwards
|
||||||
for t > 0 && s > nextEmit && src[t-1] == src[s-1] {
|
for t > 0 && s > nextEmit && src[t-1] == src[s-1] {
|
||||||
@@ -129,7 +158,28 @@ func (e *fastEncL1) Encode(dst *tokens, src []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save the match found
|
// Save the match found
|
||||||
dst.AddMatchLong(l, uint32(s-t-baseMatchOffset))
|
if false {
|
||||||
|
dst.AddMatchLong(l, uint32(s-t-baseMatchOffset))
|
||||||
|
} else {
|
||||||
|
// Inlined...
|
||||||
|
xoffset := uint32(s - t - baseMatchOffset)
|
||||||
|
xlength := l
|
||||||
|
oc := offsetCode(xoffset)
|
||||||
|
xoffset |= oc << 16
|
||||||
|
for xlength > 0 {
|
||||||
|
xl := xlength
|
||||||
|
if xl > 258 {
|
||||||
|
// We need to have at least baseMatchLength left over for next loop.
|
||||||
|
xl = 258 - baseMatchLength
|
||||||
|
}
|
||||||
|
xlength -= xl
|
||||||
|
xl -= baseMatchLength
|
||||||
|
dst.extraHist[lengthCodes1[uint8(xl)]]++
|
||||||
|
dst.offHist[oc]++
|
||||||
|
dst.tokens[dst.n] = token(matchType | uint32(xl)<<lengthShift | xoffset)
|
||||||
|
dst.n++
|
||||||
|
}
|
||||||
|
}
|
||||||
s += l
|
s += l
|
||||||
nextEmit = s
|
nextEmit = s
|
||||||
if nextS >= s {
|
if nextS >= s {
|
||||||
|
|||||||
45
vendor/github.com/klauspost/compress/flate/level3.go
сгенерированный
поставляемый
45
vendor/github.com/klauspost/compress/flate/level3.go
сгенерированный
поставляемый
@@ -5,7 +5,7 @@ import "fmt"
|
|||||||
// fastEncL3
|
// fastEncL3
|
||||||
type fastEncL3 struct {
|
type fastEncL3 struct {
|
||||||
fastGen
|
fastGen
|
||||||
table [tableSize]tableEntryPrev
|
table [1 << 16]tableEntryPrev
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encode uses a similar algorithm to level 2, will check up to two candidates.
|
// Encode uses a similar algorithm to level 2, will check up to two candidates.
|
||||||
@@ -13,6 +13,8 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) {
|
|||||||
const (
|
const (
|
||||||
inputMargin = 8 - 1
|
inputMargin = 8 - 1
|
||||||
minNonLiteralBlockSize = 1 + 1 + inputMargin
|
minNonLiteralBlockSize = 1 + 1 + inputMargin
|
||||||
|
tableBits = 16
|
||||||
|
tableSize = 1 << tableBits
|
||||||
)
|
)
|
||||||
|
|
||||||
if debugDeflate && e.cur < 0 {
|
if debugDeflate && e.cur < 0 {
|
||||||
@@ -73,7 +75,7 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) {
|
|||||||
nextS := s
|
nextS := s
|
||||||
var candidate tableEntry
|
var candidate tableEntry
|
||||||
for {
|
for {
|
||||||
nextHash := hash(cv)
|
nextHash := hash4u(cv, tableBits)
|
||||||
s = nextS
|
s = nextS
|
||||||
nextS = s + 1 + (s-nextEmit)>>skipLog
|
nextS = s + 1 + (s-nextEmit)>>skipLog
|
||||||
if nextS > sLimit {
|
if nextS > sLimit {
|
||||||
@@ -156,7 +158,7 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) {
|
|||||||
// Index first pair after match end.
|
// Index first pair after match end.
|
||||||
if int(t+4) < len(src) && t > 0 {
|
if int(t+4) < len(src) && t > 0 {
|
||||||
cv := load3232(src, t)
|
cv := load3232(src, t)
|
||||||
nextHash := hash(cv)
|
nextHash := hash4u(cv, tableBits)
|
||||||
e.table[nextHash] = tableEntryPrev{
|
e.table[nextHash] = tableEntryPrev{
|
||||||
Prev: e.table[nextHash].Cur,
|
Prev: e.table[nextHash].Cur,
|
||||||
Cur: tableEntry{offset: e.cur + t},
|
Cur: tableEntry{offset: e.cur + t},
|
||||||
@@ -165,30 +167,31 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) {
|
|||||||
goto emitRemainder
|
goto emitRemainder
|
||||||
}
|
}
|
||||||
|
|
||||||
// We could immediately start working at s now, but to improve
|
// Store every 5th hash in-between.
|
||||||
// compression we first update the hash table at s-3 to s.
|
for i := s - l + 2; i < s-5; i += 5 {
|
||||||
x := load6432(src, s-3)
|
nextHash := hash4u(load3232(src, i), tableBits)
|
||||||
prevHash := hash(uint32(x))
|
e.table[nextHash] = tableEntryPrev{
|
||||||
e.table[prevHash] = tableEntryPrev{
|
Prev: e.table[nextHash].Cur,
|
||||||
Prev: e.table[prevHash].Cur,
|
Cur: tableEntry{offset: e.cur + i}}
|
||||||
Cur: tableEntry{offset: e.cur + s - 3},
|
|
||||||
}
|
}
|
||||||
x >>= 8
|
// We could immediately start working at s now, but to improve
|
||||||
prevHash = hash(uint32(x))
|
// compression we first update the hash table at s-2 to s.
|
||||||
|
x := load6432(src, s-2)
|
||||||
|
prevHash := hash4u(uint32(x), tableBits)
|
||||||
|
|
||||||
e.table[prevHash] = tableEntryPrev{
|
e.table[prevHash] = tableEntryPrev{
|
||||||
Prev: e.table[prevHash].Cur,
|
Prev: e.table[prevHash].Cur,
|
||||||
Cur: tableEntry{offset: e.cur + s - 2},
|
Cur: tableEntry{offset: e.cur + s - 2},
|
||||||
}
|
}
|
||||||
x >>= 8
|
x >>= 8
|
||||||
prevHash = hash(uint32(x))
|
prevHash = hash4u(uint32(x), tableBits)
|
||||||
|
|
||||||
e.table[prevHash] = tableEntryPrev{
|
e.table[prevHash] = tableEntryPrev{
|
||||||
Prev: e.table[prevHash].Cur,
|
Prev: e.table[prevHash].Cur,
|
||||||
Cur: tableEntry{offset: e.cur + s - 1},
|
Cur: tableEntry{offset: e.cur + s - 1},
|
||||||
}
|
}
|
||||||
x >>= 8
|
x >>= 8
|
||||||
currHash := hash(uint32(x))
|
currHash := hash4u(uint32(x), tableBits)
|
||||||
candidates := e.table[currHash]
|
candidates := e.table[currHash]
|
||||||
cv = uint32(x)
|
cv = uint32(x)
|
||||||
e.table[currHash] = tableEntryPrev{
|
e.table[currHash] = tableEntryPrev{
|
||||||
@@ -200,15 +203,15 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) {
|
|||||||
candidate = candidates.Cur
|
candidate = candidates.Cur
|
||||||
minOffset := e.cur + s - (maxMatchOffset - 4)
|
minOffset := e.cur + s - (maxMatchOffset - 4)
|
||||||
|
|
||||||
if candidate.offset > minOffset && cv != load3232(src, candidate.offset-e.cur) {
|
if candidate.offset > minOffset {
|
||||||
// We only check if value mismatches.
|
if cv == load3232(src, candidate.offset-e.cur) {
|
||||||
// Offset will always be invalid in other cases.
|
// Found a match...
|
||||||
|
continue
|
||||||
|
}
|
||||||
candidate = candidates.Prev
|
candidate = candidates.Prev
|
||||||
if candidate.offset > minOffset && cv == load3232(src, candidate.offset-e.cur) {
|
if candidate.offset > minOffset && cv == load3232(src, candidate.offset-e.cur) {
|
||||||
offset := s - (candidate.offset - e.cur)
|
// Match at prev...
|
||||||
if offset <= maxMatchOffset {
|
continue
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cv = uint32(x >> 8)
|
cv = uint32(x >> 8)
|
||||||
|
|||||||
17
vendor/github.com/klauspost/compress/flate/token.go
сгенерированный
поставляемый
17
vendor/github.com/klauspost/compress/flate/token.go
сгенерированный
поставляемый
@@ -13,11 +13,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// From top
|
// bits 0-16 xoffset = offset - MIN_OFFSET_SIZE, or literal - 16 bits
|
||||||
// 2 bits: type 0 = literal 1=EOF 2=Match 3=Unused
|
// bits 16-22 offsetcode - 5 bits
|
||||||
// 8 bits: xlength = length - MIN_MATCH_LENGTH
|
// bits 22-30 xlength = length - MIN_MATCH_LENGTH - 8 bits
|
||||||
// 5 bits offsetcode
|
// bits 30-32 type 0 = literal 1=EOF 2=Match 3=Unused - 2 bits
|
||||||
// 16 bits xoffset = offset - MIN_OFFSET_SIZE, or literal
|
|
||||||
lengthShift = 22
|
lengthShift = 22
|
||||||
offsetMask = 1<<lengthShift - 1
|
offsetMask = 1<<lengthShift - 1
|
||||||
typeMask = 3 << 30
|
typeMask = 3 << 30
|
||||||
@@ -276,7 +275,7 @@ func (t *tokens) AddMatch(xlength uint32, xoffset uint32) {
|
|||||||
xoffset |= oCode << 16
|
xoffset |= oCode << 16
|
||||||
|
|
||||||
t.extraHist[lengthCodes1[uint8(xlength)]]++
|
t.extraHist[lengthCodes1[uint8(xlength)]]++
|
||||||
t.offHist[oCode]++
|
t.offHist[oCode&31]++
|
||||||
t.tokens[t.n] = token(matchType | xlength<<lengthShift | xoffset)
|
t.tokens[t.n] = token(matchType | xlength<<lengthShift | xoffset)
|
||||||
t.n++
|
t.n++
|
||||||
}
|
}
|
||||||
@@ -300,7 +299,7 @@ func (t *tokens) AddMatchLong(xlength int32, xoffset uint32) {
|
|||||||
xlength -= xl
|
xlength -= xl
|
||||||
xl -= baseMatchLength
|
xl -= baseMatchLength
|
||||||
t.extraHist[lengthCodes1[uint8(xl)]]++
|
t.extraHist[lengthCodes1[uint8(xl)]]++
|
||||||
t.offHist[oc]++
|
t.offHist[oc&31]++
|
||||||
t.tokens[t.n] = token(matchType | uint32(xl)<<lengthShift | xoffset)
|
t.tokens[t.n] = token(matchType | uint32(xl)<<lengthShift | xoffset)
|
||||||
t.n++
|
t.n++
|
||||||
}
|
}
|
||||||
@@ -356,8 +355,8 @@ func (t token) offset() uint32 { return uint32(t) & offsetMask }
|
|||||||
|
|
||||||
func (t token) length() uint8 { return uint8(t >> lengthShift) }
|
func (t token) length() uint8 { return uint8(t >> lengthShift) }
|
||||||
|
|
||||||
// The code is never more than 8 bits, but is returned as uint32 for convenience.
|
// Convert length to code.
|
||||||
func lengthCode(len uint8) uint32 { return uint32(lengthCodes[len]) }
|
func lengthCode(len uint8) uint8 { return lengthCodes[len] }
|
||||||
|
|
||||||
// Returns the offset code corresponding to a specific offset
|
// Returns the offset code corresponding to a specific offset
|
||||||
func offsetCode(off uint32) uint32 {
|
func offsetCode(off uint32) uint32 {
|
||||||
|
|||||||
321
vendor/github.com/klauspost/compress/huff0/decompress.go
сгенерированный
поставляемый
321
vendor/github.com/klauspost/compress/huff0/decompress.go
сгенерированный
поставляемый
@@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/klauspost/compress/fse"
|
"github.com/klauspost/compress/fse"
|
||||||
)
|
)
|
||||||
@@ -216,6 +217,7 @@ func (s *Scratch) Decoder() *Decoder {
|
|||||||
return &Decoder{
|
return &Decoder{
|
||||||
dt: s.dt,
|
dt: s.dt,
|
||||||
actualTableLog: s.actualTableLog,
|
actualTableLog: s.actualTableLog,
|
||||||
|
bufs: &s.decPool,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,6 +225,15 @@ func (s *Scratch) Decoder() *Decoder {
|
|||||||
type Decoder struct {
|
type Decoder struct {
|
||||||
dt dTable
|
dt dTable
|
||||||
actualTableLog uint8
|
actualTableLog uint8
|
||||||
|
bufs *sync.Pool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Decoder) buffer() *[4][256]byte {
|
||||||
|
buf, ok := d.bufs.Get().(*[4][256]byte)
|
||||||
|
if ok {
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
return &[4][256]byte{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decompress1X will decompress a 1X encoded stream.
|
// Decompress1X will decompress a 1X encoded stream.
|
||||||
@@ -249,7 +260,8 @@ func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
|
|||||||
dt := d.dt.single[:tlSize]
|
dt := d.dt.single[:tlSize]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
bufs := d.buffer()
|
||||||
|
buf := &bufs[0]
|
||||||
var off uint8
|
var off uint8
|
||||||
|
|
||||||
for br.off >= 8 {
|
for br.off >= 8 {
|
||||||
@@ -277,6 +289,7 @@ func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
|
|||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
br.close()
|
br.close()
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
dst = append(dst, buf[:]...)
|
dst = append(dst, buf[:]...)
|
||||||
@@ -284,6 +297,7 @@ func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(dst)+int(off) > maxDecodedSize {
|
if len(dst)+int(off) > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -310,6 +324,7 @@ func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(dst) >= maxDecodedSize {
|
if len(dst) >= maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -319,6 +334,7 @@ func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
|
|||||||
bitsLeft -= nBits
|
bitsLeft -= nBits
|
||||||
dst = append(dst, uint8(v.entry>>8))
|
dst = append(dst, uint8(v.entry>>8))
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return dst, br.close()
|
return dst, br.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +357,8 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
dt := d.dt.single[:256]
|
dt := d.dt.single[:256]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
bufs := d.buffer()
|
||||||
|
buf := &bufs[0]
|
||||||
var off uint8
|
var off uint8
|
||||||
|
|
||||||
switch d.actualTableLog {
|
switch d.actualTableLog {
|
||||||
@@ -369,6 +386,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
br.close()
|
br.close()
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
dst = append(dst, buf[:]...)
|
dst = append(dst, buf[:]...)
|
||||||
@@ -398,6 +416,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
br.close()
|
br.close()
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
dst = append(dst, buf[:]...)
|
dst = append(dst, buf[:]...)
|
||||||
@@ -426,6 +445,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -455,6 +475,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -484,6 +505,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -513,6 +535,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -542,6 +565,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -571,6 +595,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -578,10 +603,12 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return nil, fmt.Errorf("invalid tablelog: %d", d.actualTableLog)
|
return nil, fmt.Errorf("invalid tablelog: %d", d.actualTableLog)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(dst)+int(off) > maxDecodedSize {
|
if len(dst)+int(off) > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -601,6 +628,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
if len(dst) >= maxDecodedSize {
|
if len(dst) >= maxDecodedSize {
|
||||||
br.close()
|
br.close()
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
v := dt[br.peekByteFast()>>shift]
|
v := dt[br.peekByteFast()>>shift]
|
||||||
@@ -609,6 +637,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
|
|||||||
bitsLeft -= int8(nBits)
|
bitsLeft -= int8(nBits)
|
||||||
dst = append(dst, uint8(v.entry>>8))
|
dst = append(dst, uint8(v.entry>>8))
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return dst, br.close()
|
return dst, br.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -628,7 +657,8 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
dt := d.dt.single[:256]
|
dt := d.dt.single[:256]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
bufs := d.buffer()
|
||||||
|
buf := &bufs[0]
|
||||||
var off uint8
|
var off uint8
|
||||||
|
|
||||||
const shift = 56
|
const shift = 56
|
||||||
@@ -655,6 +685,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
off += 4
|
off += 4
|
||||||
if off == 0 {
|
if off == 0 {
|
||||||
if len(dst)+256 > maxDecodedSize {
|
if len(dst)+256 > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -663,6 +694,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(dst)+int(off) > maxDecodedSize {
|
if len(dst)+int(off) > maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -679,6 +711,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(dst) >= maxDecodedSize {
|
if len(dst) >= maxDecodedSize {
|
||||||
|
d.bufs.Put(bufs)
|
||||||
br.close()
|
br.close()
|
||||||
return nil, ErrMaxDecodedSizeExceeded
|
return nil, ErrMaxDecodedSizeExceeded
|
||||||
}
|
}
|
||||||
@@ -688,6 +721,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
bitsLeft -= int8(nBits)
|
bitsLeft -= int8(nBits)
|
||||||
dst = append(dst, uint8(v.entry>>8))
|
dst = append(dst, uint8(v.entry>>8))
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(bufs)
|
||||||
return dst, br.close()
|
return dst, br.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -735,12 +769,12 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
single := d.dt.single[:tlSize]
|
single := d.dt.single[:tlSize]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
buf := d.buffer()
|
||||||
var off uint8
|
var off uint8
|
||||||
var decoded int
|
var decoded int
|
||||||
|
|
||||||
// Decode 2 values from each decoder/loop.
|
// Decode 2 values from each decoder/loop.
|
||||||
const bufoff = 256 / 4
|
const bufoff = 256
|
||||||
for {
|
for {
|
||||||
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
||||||
break
|
break
|
||||||
@@ -758,8 +792,8 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
v2 := single[val2&tlMask]
|
v2 := single[val2&tlMask]
|
||||||
br[stream].advance(uint8(v.entry))
|
br[stream].advance(uint8(v.entry))
|
||||||
br[stream2].advance(uint8(v2.entry))
|
br[stream2].advance(uint8(v2.entry))
|
||||||
buf[off+bufoff*stream] = uint8(v.entry >> 8)
|
buf[stream][off] = uint8(v.entry >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2.entry >> 8)
|
buf[stream2][off] = uint8(v2.entry >> 8)
|
||||||
|
|
||||||
val = br[stream].peekBitsFast(d.actualTableLog)
|
val = br[stream].peekBitsFast(d.actualTableLog)
|
||||||
val2 = br[stream2].peekBitsFast(d.actualTableLog)
|
val2 = br[stream2].peekBitsFast(d.actualTableLog)
|
||||||
@@ -767,8 +801,8 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
v2 = single[val2&tlMask]
|
v2 = single[val2&tlMask]
|
||||||
br[stream].advance(uint8(v.entry))
|
br[stream].advance(uint8(v.entry))
|
||||||
br[stream2].advance(uint8(v2.entry))
|
br[stream2].advance(uint8(v2.entry))
|
||||||
buf[off+bufoff*stream+1] = uint8(v.entry >> 8)
|
buf[stream][off+1] = uint8(v.entry >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2.entry >> 8)
|
buf[stream2][off+1] = uint8(v2.entry >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -783,8 +817,8 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
v2 := single[val2&tlMask]
|
v2 := single[val2&tlMask]
|
||||||
br[stream].advance(uint8(v.entry))
|
br[stream].advance(uint8(v.entry))
|
||||||
br[stream2].advance(uint8(v2.entry))
|
br[stream2].advance(uint8(v2.entry))
|
||||||
buf[off+bufoff*stream] = uint8(v.entry >> 8)
|
buf[stream][off] = uint8(v.entry >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2.entry >> 8)
|
buf[stream2][off] = uint8(v2.entry >> 8)
|
||||||
|
|
||||||
val = br[stream].peekBitsFast(d.actualTableLog)
|
val = br[stream].peekBitsFast(d.actualTableLog)
|
||||||
val2 = br[stream2].peekBitsFast(d.actualTableLog)
|
val2 = br[stream2].peekBitsFast(d.actualTableLog)
|
||||||
@@ -792,25 +826,26 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
v2 = single[val2&tlMask]
|
v2 = single[val2&tlMask]
|
||||||
br[stream].advance(uint8(v.entry))
|
br[stream].advance(uint8(v.entry))
|
||||||
br[stream2].advance(uint8(v2.entry))
|
br[stream2].advance(uint8(v2.entry))
|
||||||
buf[off+bufoff*stream+1] = uint8(v.entry >> 8)
|
buf[stream][off+1] = uint8(v.entry >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2.entry >> 8)
|
buf[stream2][off+1] = uint8(v2.entry >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
off += 2
|
off += 2
|
||||||
|
|
||||||
if off == bufoff {
|
if off == 0 {
|
||||||
if bufoff > dstEvery {
|
if bufoff > dstEvery {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 1")
|
return nil, errors.New("corruption detected: stream overrun 1")
|
||||||
}
|
}
|
||||||
copy(out, buf[:bufoff])
|
copy(out, buf[0][:])
|
||||||
copy(out[dstEvery:], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:])
|
||||||
copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:])
|
||||||
copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:])
|
||||||
off = 0
|
|
||||||
out = out[bufoff:]
|
out = out[bufoff:]
|
||||||
decoded += 256
|
decoded += bufoff * 4
|
||||||
// There must at least be 3 buffers left.
|
// There must at least be 3 buffers left.
|
||||||
if len(out) < dstEvery*3 {
|
if len(out) < dstEvery*3 {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 2")
|
return nil, errors.New("corruption detected: stream overrun 2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -818,12 +853,13 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
if off > 0 {
|
if off > 0 {
|
||||||
ioff := int(off)
|
ioff := int(off)
|
||||||
if len(out) < dstEvery*3+ioff {
|
if len(out) < dstEvery*3+ioff {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 3")
|
return nil, errors.New("corruption detected: stream overrun 3")
|
||||||
}
|
}
|
||||||
copy(out, buf[:off])
|
copy(out, buf[0][:off])
|
||||||
copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:off])
|
||||||
copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:off])
|
||||||
copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:off])
|
||||||
decoded += int(off) * 4
|
decoded += int(off) * 4
|
||||||
out = out[off:]
|
out = out[off:]
|
||||||
}
|
}
|
||||||
@@ -853,6 +889,7 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
// end inline...
|
// end inline...
|
||||||
if offset >= len(out) {
|
if offset >= len(out) {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 4")
|
return nil, errors.New("corruption detected: stream overrun 4")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -871,6 +908,7 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(buf)
|
||||||
if dstSize != decoded {
|
if dstSize != decoded {
|
||||||
return nil, errors.New("corruption detected: short output block")
|
return nil, errors.New("corruption detected: short output block")
|
||||||
}
|
}
|
||||||
@@ -916,12 +954,12 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
single := d.dt.single[:tlSize]
|
single := d.dt.single[:tlSize]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
buf := d.buffer()
|
||||||
var off uint8
|
var off uint8
|
||||||
var decoded int
|
var decoded int
|
||||||
|
|
||||||
// Decode 4 values from each decoder/loop.
|
// Decode 4 values from each decoder/loop.
|
||||||
const bufoff = 256 / 4
|
const bufoff = 256
|
||||||
for {
|
for {
|
||||||
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
||||||
break
|
break
|
||||||
@@ -942,8 +980,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream] = uint8(v >> 8)
|
buf[stream][off] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2 >> 8)
|
buf[stream2][off] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -951,8 +989,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+1] = uint8(v >> 8)
|
buf[stream][off+1] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2 >> 8)
|
buf[stream2][off+1] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -960,8 +998,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+2] = uint8(v >> 8)
|
buf[stream][off+2] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+2] = uint8(v2 >> 8)
|
buf[stream2][off+2] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -969,8 +1007,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream2+3] = uint8(v2 >> 8)
|
buf[stream][off+3] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream+3] = uint8(v >> 8)
|
buf[stream2][off+3] = uint8(v2 >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -987,8 +1025,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream] = uint8(v >> 8)
|
buf[stream][off] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2 >> 8)
|
buf[stream2][off] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -996,8 +1034,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+1] = uint8(v >> 8)
|
buf[stream][off+1] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2 >> 8)
|
buf[stream2][off+1] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -1005,8 +1043,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+2] = uint8(v >> 8)
|
buf[stream][off+2] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+2] = uint8(v2 >> 8)
|
buf[stream2][off+2] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br1.value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br2.value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
@@ -1014,25 +1052,26 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
br1.value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br2.bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br2.value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream2+3] = uint8(v2 >> 8)
|
buf[stream][off+3] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream+3] = uint8(v >> 8)
|
buf[stream2][off+3] = uint8(v2 >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
off += 4
|
off += 4
|
||||||
|
|
||||||
if off == bufoff {
|
if off == 0 {
|
||||||
if bufoff > dstEvery {
|
if bufoff > dstEvery {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 1")
|
return nil, errors.New("corruption detected: stream overrun 1")
|
||||||
}
|
}
|
||||||
copy(out, buf[:bufoff])
|
copy(out, buf[0][:])
|
||||||
copy(out[dstEvery:], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:])
|
||||||
copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:])
|
||||||
copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:])
|
||||||
off = 0
|
|
||||||
out = out[bufoff:]
|
out = out[bufoff:]
|
||||||
decoded += 256
|
decoded += bufoff * 4
|
||||||
// There must at least be 3 buffers left.
|
// There must at least be 3 buffers left.
|
||||||
if len(out) < dstEvery*3 {
|
if len(out) < dstEvery*3 {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 2")
|
return nil, errors.New("corruption detected: stream overrun 2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1040,12 +1079,13 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
if off > 0 {
|
if off > 0 {
|
||||||
ioff := int(off)
|
ioff := int(off)
|
||||||
if len(out) < dstEvery*3+ioff {
|
if len(out) < dstEvery*3+ioff {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 3")
|
return nil, errors.New("corruption detected: stream overrun 3")
|
||||||
}
|
}
|
||||||
copy(out, buf[:off])
|
copy(out, buf[0][:off])
|
||||||
copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:off])
|
||||||
copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:off])
|
||||||
copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:off])
|
||||||
decoded += int(off) * 4
|
decoded += int(off) * 4
|
||||||
out = out[off:]
|
out = out[off:]
|
||||||
}
|
}
|
||||||
@@ -1057,6 +1097,7 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
bitsLeft := int(br.off*8) + int(64-br.bitsRead)
|
bitsLeft := int(br.off*8) + int(64-br.bitsRead)
|
||||||
for bitsLeft > 0 {
|
for bitsLeft > 0 {
|
||||||
if br.finished() {
|
if br.finished() {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, io.ErrUnexpectedEOF
|
return nil, io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
if br.bitsRead >= 56 {
|
if br.bitsRead >= 56 {
|
||||||
@@ -1077,6 +1118,7 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
// end inline...
|
// end inline...
|
||||||
if offset >= len(out) {
|
if offset >= len(out) {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 4")
|
return nil, errors.New("corruption detected: stream overrun 4")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1091,9 +1133,11 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
|
|||||||
decoded += offset - dstEvery*i
|
decoded += offset - dstEvery*i
|
||||||
err = br.close()
|
err = br.close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(buf)
|
||||||
if dstSize != decoded {
|
if dstSize != decoded {
|
||||||
return nil, errors.New("corruption detected: short output block")
|
return nil, errors.New("corruption detected: short output block")
|
||||||
}
|
}
|
||||||
@@ -1135,12 +1179,12 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
single := d.dt.single[:tlSize]
|
single := d.dt.single[:tlSize]
|
||||||
|
|
||||||
// Use temp table to avoid bound checks/append penalty.
|
// Use temp table to avoid bound checks/append penalty.
|
||||||
var buf [256]byte
|
buf := d.buffer()
|
||||||
var off uint8
|
var off uint8
|
||||||
var decoded int
|
var decoded int
|
||||||
|
|
||||||
// Decode 4 values from each decoder/loop.
|
// Decode 4 values from each decoder/loop.
|
||||||
const bufoff = 256 / 4
|
const bufoff = 256
|
||||||
for {
|
for {
|
||||||
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
|
||||||
break
|
break
|
||||||
@@ -1150,104 +1194,109 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
// Interleave 2 decodes.
|
// Interleave 2 decodes.
|
||||||
const stream = 0
|
const stream = 0
|
||||||
const stream2 = 1
|
const stream2 = 1
|
||||||
br[stream].fillFast()
|
br1 := &br[stream]
|
||||||
br[stream2].fillFast()
|
br2 := &br[stream2]
|
||||||
|
br1.fillFast()
|
||||||
|
br2.fillFast()
|
||||||
|
|
||||||
v := single[uint8(br[stream].value>>shift)].entry
|
v := single[uint8(br1.value>>shift)].entry
|
||||||
v2 := single[uint8(br[stream2].value>>shift)].entry
|
v2 := single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream] = uint8(v >> 8)
|
buf[stream][off] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2 >> 8)
|
buf[stream2][off] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+1] = uint8(v >> 8)
|
buf[stream][off+1] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2 >> 8)
|
buf[stream2][off+1] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+2] = uint8(v >> 8)
|
buf[stream][off+2] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+2] = uint8(v2 >> 8)
|
buf[stream2][off+2] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+3] = uint8(v >> 8)
|
buf[stream][off+3] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+3] = uint8(v2 >> 8)
|
buf[stream2][off+3] = uint8(v2 >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const stream = 2
|
const stream = 2
|
||||||
const stream2 = 3
|
const stream2 = 3
|
||||||
br[stream].fillFast()
|
br1 := &br[stream]
|
||||||
br[stream2].fillFast()
|
br2 := &br[stream2]
|
||||||
|
br1.fillFast()
|
||||||
|
br2.fillFast()
|
||||||
|
|
||||||
v := single[uint8(br[stream].value>>shift)].entry
|
v := single[uint8(br1.value>>shift)].entry
|
||||||
v2 := single[uint8(br[stream2].value>>shift)].entry
|
v2 := single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream] = uint8(v >> 8)
|
buf[stream][off] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2] = uint8(v2 >> 8)
|
buf[stream2][off] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+1] = uint8(v >> 8)
|
buf[stream][off+1] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+1] = uint8(v2 >> 8)
|
buf[stream2][off+1] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+2] = uint8(v >> 8)
|
buf[stream][off+2] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+2] = uint8(v2 >> 8)
|
buf[stream2][off+2] = uint8(v2 >> 8)
|
||||||
|
|
||||||
v = single[uint8(br[stream].value>>shift)].entry
|
v = single[uint8(br1.value>>shift)].entry
|
||||||
v2 = single[uint8(br[stream2].value>>shift)].entry
|
v2 = single[uint8(br2.value>>shift)].entry
|
||||||
br[stream].bitsRead += uint8(v)
|
br1.bitsRead += uint8(v)
|
||||||
br[stream].value <<= v & 63
|
br1.value <<= v & 63
|
||||||
br[stream2].bitsRead += uint8(v2)
|
br2.bitsRead += uint8(v2)
|
||||||
br[stream2].value <<= v2 & 63
|
br2.value <<= v2 & 63
|
||||||
buf[off+bufoff*stream+3] = uint8(v >> 8)
|
buf[stream][off+3] = uint8(v >> 8)
|
||||||
buf[off+bufoff*stream2+3] = uint8(v2 >> 8)
|
buf[stream2][off+3] = uint8(v2 >> 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
off += 4
|
off += 4
|
||||||
|
|
||||||
if off == bufoff {
|
if off == 0 {
|
||||||
if bufoff > dstEvery {
|
if bufoff > dstEvery {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 1")
|
return nil, errors.New("corruption detected: stream overrun 1")
|
||||||
}
|
}
|
||||||
copy(out, buf[:bufoff])
|
copy(out, buf[0][:])
|
||||||
copy(out[dstEvery:], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:])
|
||||||
copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:])
|
||||||
copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:])
|
||||||
off = 0
|
|
||||||
out = out[bufoff:]
|
out = out[bufoff:]
|
||||||
decoded += 256
|
decoded += bufoff * 4
|
||||||
// There must at least be 3 buffers left.
|
// There must at least be 3 buffers left.
|
||||||
if len(out) < dstEvery*3 {
|
if len(out) < dstEvery*3 {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 2")
|
return nil, errors.New("corruption detected: stream overrun 2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1257,10 +1306,10 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
if len(out) < dstEvery*3+ioff {
|
if len(out) < dstEvery*3+ioff {
|
||||||
return nil, errors.New("corruption detected: stream overrun 3")
|
return nil, errors.New("corruption detected: stream overrun 3")
|
||||||
}
|
}
|
||||||
copy(out, buf[:off])
|
copy(out, buf[0][:off])
|
||||||
copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2])
|
copy(out[dstEvery:], buf[1][:off])
|
||||||
copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3])
|
copy(out[dstEvery*2:], buf[2][:off])
|
||||||
copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4])
|
copy(out[dstEvery*3:], buf[3][:off])
|
||||||
decoded += int(off) * 4
|
decoded += int(off) * 4
|
||||||
out = out[off:]
|
out = out[off:]
|
||||||
}
|
}
|
||||||
@@ -1272,6 +1321,7 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
bitsLeft := int(br.off*8) + int(64-br.bitsRead)
|
bitsLeft := int(br.off*8) + int(64-br.bitsRead)
|
||||||
for bitsLeft > 0 {
|
for bitsLeft > 0 {
|
||||||
if br.finished() {
|
if br.finished() {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, io.ErrUnexpectedEOF
|
return nil, io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
if br.bitsRead >= 56 {
|
if br.bitsRead >= 56 {
|
||||||
@@ -1292,6 +1342,7 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
// end inline...
|
// end inline...
|
||||||
if offset >= len(out) {
|
if offset >= len(out) {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, errors.New("corruption detected: stream overrun 4")
|
return nil, errors.New("corruption detected: stream overrun 4")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1306,9 +1357,11 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
|
|||||||
decoded += offset - dstEvery*i
|
decoded += offset - dstEvery*i
|
||||||
err = br.close()
|
err = br.close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.bufs.Put(buf)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
d.bufs.Put(buf)
|
||||||
if dstSize != decoded {
|
if dstSize != decoded {
|
||||||
return nil, errors.New("corruption detected: short output block")
|
return nil, errors.New("corruption detected: short output block")
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/github.com/klauspost/compress/huff0/huff0.go
сгенерированный
поставляемый
2
vendor/github.com/klauspost/compress/huff0/huff0.go
сгенерированный
поставляемый
@@ -8,6 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"math/bits"
|
"math/bits"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/klauspost/compress/fse"
|
"github.com/klauspost/compress/fse"
|
||||||
)
|
)
|
||||||
@@ -116,6 +117,7 @@ type Scratch struct {
|
|||||||
nodes []nodeElt
|
nodes []nodeElt
|
||||||
tmpOut [4][]byte
|
tmpOut [4][]byte
|
||||||
fse *fse.Scratch
|
fse *fse.Scratch
|
||||||
|
decPool sync.Pool // *[4][256]byte buffers.
|
||||||
huffWeight [maxSymbolValue + 1]byte
|
huffWeight [maxSymbolValue + 1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
vendor/github.com/klauspost/compress/s2/encodeblock_amd64.go
сгенерированный
поставляемый
4
vendor/github.com/klauspost/compress/s2/encodeblock_amd64.go
сгенерированный
поставляемый
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by command: go run gen.go -out ../encodeblock_amd64.s -stubs ../encodeblock_amd64.go -pkg=s2. DO NOT EDIT.
|
// Code generated by command: go run gen.go -out ../encodeblock_amd64.s -stubs ../encodeblock_amd64.go -pkg=s2. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build !appengine && !noasm && gc
|
//go:build !appengine && !noasm && gc && !noasm
|
||||||
// +build !appengine,!noasm,gc
|
// +build !appengine,!noasm,gc,!noasm
|
||||||
|
|
||||||
package s2
|
package s2
|
||||||
|
|
||||||
|
|||||||
1751
vendor/github.com/klauspost/compress/s2/encodeblock_amd64.s
сгенерированный
поставляемый
1751
vendor/github.com/klauspost/compress/s2/encodeblock_amd64.s
сгенерированный
поставляемый
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
96
vendor/github.com/klauspost/compress/zip/reader.go
сгенерированный
поставляемый
96
vendor/github.com/klauspost/compress/zip/reader.go
сгенерированный
поставляемый
@@ -128,7 +128,6 @@ func (z *Reader) init(r io.ReaderAt, size int64) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
f.readDataDescriptor()
|
|
||||||
z.File = append(z.File, f)
|
z.File = append(z.File, f)
|
||||||
}
|
}
|
||||||
if uint16(len(z.File)) != uint16(end.directoryRecords) { // only compare 16 bits here
|
if uint16(len(z.File)) != uint16(end.directoryRecords) { // only compare 16 bits here
|
||||||
@@ -189,10 +188,15 @@ func (f *File) Open() (io.ReadCloser, error) {
|
|||||||
return nil, ErrAlgorithm
|
return nil, ErrAlgorithm
|
||||||
}
|
}
|
||||||
var rc io.ReadCloser = dcomp(r)
|
var rc io.ReadCloser = dcomp(r)
|
||||||
|
var desr io.Reader
|
||||||
|
if f.hasDataDescriptor() {
|
||||||
|
desr = io.NewSectionReader(f.zipr, f.headerOffset+bodyOffset+size, dataDescriptorLen)
|
||||||
|
}
|
||||||
rc = &checksumReader{
|
rc = &checksumReader{
|
||||||
rc: rc,
|
rc: rc,
|
||||||
hash: crc32.NewIEEE(),
|
hash: crc32.NewIEEE(),
|
||||||
f: f,
|
f: f,
|
||||||
|
desr: desr,
|
||||||
}
|
}
|
||||||
return rc, nil
|
return rc, nil
|
||||||
}
|
}
|
||||||
@@ -208,49 +212,13 @@ func (f *File) OpenRaw() (io.Reader, error) {
|
|||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *File) readDataDescriptor() {
|
|
||||||
if !f.hasDataDescriptor() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
bodyOffset, err := f.findBodyOffset()
|
|
||||||
if err != nil {
|
|
||||||
f.descErr = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// In section 4.3.9.2 of the spec: "However ZIP64 format MAY be used
|
|
||||||
// regardless of the size of a file. When extracting, if the zip64
|
|
||||||
// extended information extra field is present for the file the
|
|
||||||
// compressed and uncompressed sizes will be 8 byte values."
|
|
||||||
//
|
|
||||||
// Historically, this package has used the compressed and uncompressed
|
|
||||||
// sizes from the central directory to determine if the package is
|
|
||||||
// zip64.
|
|
||||||
//
|
|
||||||
// For this case we allow either the extra field or sizes to determine
|
|
||||||
// the data descriptor length.
|
|
||||||
zip64 := f.zip64 || f.isZip64()
|
|
||||||
n := int64(dataDescriptorLen)
|
|
||||||
if zip64 {
|
|
||||||
n = dataDescriptor64Len
|
|
||||||
}
|
|
||||||
size := int64(f.CompressedSize64)
|
|
||||||
r := io.NewSectionReader(f.zipr, f.headerOffset+bodyOffset+size, n)
|
|
||||||
dd, err := readDataDescriptor(r, zip64)
|
|
||||||
if err != nil {
|
|
||||||
f.descErr = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.CRC32 = dd.crc32
|
|
||||||
}
|
|
||||||
|
|
||||||
type checksumReader struct {
|
type checksumReader struct {
|
||||||
rc io.ReadCloser
|
rc io.ReadCloser
|
||||||
hash hash.Hash32
|
hash hash.Hash32
|
||||||
nread uint64 // number of bytes read so far
|
nread uint64 // number of bytes read so far
|
||||||
f *File
|
f *File
|
||||||
err error // sticky error
|
desr io.Reader // if non-nil, where to read the data descriptor
|
||||||
|
err error // sticky error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *checksumReader) Stat() (fs.FileInfo, error) {
|
func (r *checksumReader) Stat() (fs.FileInfo, error) {
|
||||||
@@ -271,12 +239,12 @@ func (r *checksumReader) Read(b []byte) (n int, err error) {
|
|||||||
if r.nread != r.f.UncompressedSize64 {
|
if r.nread != r.f.UncompressedSize64 {
|
||||||
return 0, io.ErrUnexpectedEOF
|
return 0, io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
if r.f.hasDataDescriptor() {
|
if r.desr != nil {
|
||||||
if r.f.descErr != nil {
|
if err1 := readDataDescriptor(r.desr, r.f); err1 != nil {
|
||||||
if r.f.descErr == io.EOF {
|
if err1 == io.EOF {
|
||||||
err = io.ErrUnexpectedEOF
|
err = io.ErrUnexpectedEOF
|
||||||
} else {
|
} else {
|
||||||
err = r.f.descErr
|
err = err1
|
||||||
}
|
}
|
||||||
} else if r.hash.Sum32() != r.f.CRC32 {
|
} else if r.hash.Sum32() != r.f.CRC32 {
|
||||||
err = ErrChecksum
|
err = ErrChecksum
|
||||||
@@ -488,10 +456,8 @@ parseExtras:
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readDataDescriptor(r io.Reader, zip64 bool) (*dataDescriptor, error) {
|
func readDataDescriptor(r io.Reader, f *File) error {
|
||||||
// Create enough space for the largest possible size
|
var buf [dataDescriptorLen]byte
|
||||||
var buf [dataDescriptor64Len]byte
|
|
||||||
|
|
||||||
// The spec says: "Although not originally assigned a
|
// The spec says: "Although not originally assigned a
|
||||||
// signature, the value 0x08074b50 has commonly been adopted
|
// signature, the value 0x08074b50 has commonly been adopted
|
||||||
// as a signature value for the data descriptor record.
|
// as a signature value for the data descriptor record.
|
||||||
@@ -500,9 +466,10 @@ func readDataDescriptor(r io.Reader, zip64 bool) (*dataDescriptor, error) {
|
|||||||
// descriptors and should account for either case when reading
|
// descriptors and should account for either case when reading
|
||||||
// ZIP files to ensure compatibility."
|
// ZIP files to ensure compatibility."
|
||||||
//
|
//
|
||||||
// First read just those 4 bytes to see if the signature exists.
|
// dataDescriptorLen includes the size of the signature but
|
||||||
|
// first read just those 4 bytes to see if it exists.
|
||||||
if _, err := io.ReadFull(r, buf[:4]); err != nil {
|
if _, err := io.ReadFull(r, buf[:4]); err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
off := 0
|
off := 0
|
||||||
maybeSig := readBuf(buf[:4])
|
maybeSig := readBuf(buf[:4])
|
||||||
@@ -511,28 +478,21 @@ func readDataDescriptor(r io.Reader, zip64 bool) (*dataDescriptor, error) {
|
|||||||
// bytes.
|
// bytes.
|
||||||
off += 4
|
off += 4
|
||||||
}
|
}
|
||||||
|
if _, err := io.ReadFull(r, buf[off:12]); err != nil {
|
||||||
end := dataDescriptorLen - 4
|
return err
|
||||||
if zip64 {
|
|
||||||
end = dataDescriptor64Len - 4
|
|
||||||
}
|
}
|
||||||
if _, err := io.ReadFull(r, buf[off:end]); err != nil {
|
b := readBuf(buf[:12])
|
||||||
return nil, err
|
if b.uint32() != f.CRC32 {
|
||||||
}
|
return ErrChecksum
|
||||||
b := readBuf(buf[:end])
|
|
||||||
|
|
||||||
out := &dataDescriptor{
|
|
||||||
crc32: b.uint32(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if zip64 {
|
// The two sizes that follow here can be either 32 bits or 64 bits
|
||||||
out.compressedSize = b.uint64()
|
// but the spec is not very clear on this and different
|
||||||
out.uncompressedSize = b.uint64()
|
// interpretations has been made causing incompatibilities. We
|
||||||
} else {
|
// already have the sizes from the central directory so we can
|
||||||
out.compressedSize = uint64(b.uint32())
|
// just ignore these.
|
||||||
out.uncompressedSize = uint64(b.uint32())
|
|
||||||
}
|
return nil
|
||||||
return out, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func readDirectoryEnd(r io.ReaderAt, size int64) (dir *directoryEnd, err error) {
|
func readDirectoryEnd(r io.ReaderAt, size int64) (dir *directoryEnd, err error) {
|
||||||
|
|||||||
8
vendor/github.com/klauspost/compress/zip/struct.go
сгенерированный
поставляемый
8
vendor/github.com/klauspost/compress/zip/struct.go
сгенерированный
поставляемый
@@ -393,11 +393,3 @@ func unixModeToFileMode(m uint32) fs.FileMode {
|
|||||||
}
|
}
|
||||||
return mode
|
return mode
|
||||||
}
|
}
|
||||||
|
|
||||||
// dataDescriptor holds the data descriptor that optionally follows the file
|
|
||||||
// contents in the zip file.
|
|
||||||
type dataDescriptor struct {
|
|
||||||
crc32 uint32
|
|
||||||
compressedSize uint64
|
|
||||||
uncompressedSize uint64
|
|
||||||
}
|
|
||||||
|
|||||||
2
vendor/github.com/klauspost/compress/zip/writer.go
сгенерированный
поставляемый
2
vendor/github.com/klauspost/compress/zip/writer.go
сгенерированный
поставляемый
@@ -438,7 +438,7 @@ func min64(x, y uint64) uint64 {
|
|||||||
|
|
||||||
// Deprecated: CreateHeaderRaw is replaced by CreateRaw (stdlib name).
|
// Deprecated: CreateHeaderRaw is replaced by CreateRaw (stdlib name).
|
||||||
func (w *Writer) CreateHeaderRaw(fh *FileHeader) (io.Writer, error) {
|
func (w *Writer) CreateHeaderRaw(fh *FileHeader) (io.Writer, error) {
|
||||||
return w.CreateHeader(fh)
|
return w.CreateRaw(fh)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateRaw adds a file to the zip archive using the provided FileHeader and
|
// CreateRaw adds a file to the zip archive using the provided FileHeader and
|
||||||
|
|||||||
4
vendor/github.com/klauspost/compress/zstd/enc_fast.go
сгенерированный
поставляемый
4
vendor/github.com/klauspost/compress/zstd/enc_fast.go
сгенерированный
поставляемый
@@ -85,7 +85,7 @@ func (e *fastEncoder) Encode(blk *blockEnc, src []byte) {
|
|||||||
// TEMPLATE
|
// TEMPLATE
|
||||||
const hashLog = tableBits
|
const hashLog = tableBits
|
||||||
// seems global, but would be nice to tweak.
|
// seems global, but would be nice to tweak.
|
||||||
const kSearchStrength = 7
|
const kSearchStrength = 6
|
||||||
|
|
||||||
// nextEmit is where in src the next emitLiteral should start from.
|
// nextEmit is where in src the next emitLiteral should start from.
|
||||||
nextEmit := s
|
nextEmit := s
|
||||||
@@ -334,7 +334,7 @@ func (e *fastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {
|
|||||||
// TEMPLATE
|
// TEMPLATE
|
||||||
const hashLog = tableBits
|
const hashLog = tableBits
|
||||||
// seems global, but would be nice to tweak.
|
// seems global, but would be nice to tweak.
|
||||||
const kSearchStrength = 8
|
const kSearchStrength = 6
|
||||||
|
|
||||||
// nextEmit is where in src the next emitLiteral should start from.
|
// nextEmit is where in src the next emitLiteral should start from.
|
||||||
nextEmit := s
|
nextEmit := s
|
||||||
|
|||||||
4
vendor/github.com/minio/minio-go/v7/README.md
сгенерированный
поставляемый
4
vendor/github.com/minio/minio-go/v7/README.md
сгенерированный
поставляемый
@@ -214,14 +214,10 @@ The full API Reference is available here.
|
|||||||
### Full Examples : File Object Operations
|
### Full Examples : File Object Operations
|
||||||
* [fputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject.go)
|
* [fputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject.go)
|
||||||
* [fgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject.go)
|
* [fgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject.go)
|
||||||
* [fputobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject-context.go)
|
|
||||||
* [fgetobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject-context.go)
|
|
||||||
|
|
||||||
### Full Examples : Object Operations
|
### Full Examples : Object Operations
|
||||||
* [putobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject.go)
|
* [putobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject.go)
|
||||||
* [getobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject.go)
|
* [getobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject.go)
|
||||||
* [putobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject-context.go)
|
|
||||||
* [getobject-context.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject-context.go)
|
|
||||||
* [statobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/statobject.go)
|
* [statobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/statobject.go)
|
||||||
* [copyobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/copyobject.go)
|
* [copyobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/copyobject.go)
|
||||||
* [removeobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobject.go)
|
* [removeobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobject.go)
|
||||||
|
|||||||
5
vendor/github.com/minio/minio-go/v7/api-bucket-policy.go
сгенерированный
поставляемый
5
vendor/github.com/minio/minio-go/v7/api-bucket-policy.go
сгенерированный
поставляемый
@@ -87,6 +87,11 @@ func (c *Client) removeBucketPolicy(ctx context.Context, bucketName string) erro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusNoContent {
|
||||||
|
return httpRespToErrorResponse(resp, bucketName, "")
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
40
vendor/github.com/minio/minio-go/v7/api-bucket-replication.go
сгенерированный
поставляемый
40
vendor/github.com/minio/minio-go/v7/api-bucket-replication.go
сгенерированный
поставляемый
@@ -246,12 +246,42 @@ func (c *Client) resetBucketReplicationOnTarget(ctx context.Context, bucketName
|
|||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return rinfo, httpRespToErrorResponse(resp, bucketName, "")
|
return rinfo, httpRespToErrorResponse(resp, bucketName, "")
|
||||||
}
|
}
|
||||||
respBytes, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
return rinfo, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := json.Unmarshal(respBytes, &rinfo); err != nil {
|
if err = json.NewDecoder(resp.Body).Decode(&rinfo); err != nil {
|
||||||
|
return rinfo, err
|
||||||
|
}
|
||||||
|
return rinfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBucketReplicationResyncStatus gets the status of replication resync
|
||||||
|
func (c *Client) GetBucketReplicationResyncStatus(ctx context.Context, bucketName, arn string) (rinfo replication.ResyncTargetsInfo, err error) {
|
||||||
|
// Input validation.
|
||||||
|
if err := s3utils.CheckValidBucketName(bucketName); err != nil {
|
||||||
|
return rinfo, err
|
||||||
|
}
|
||||||
|
// Get resources properly escaped and lined up before
|
||||||
|
// using them in http request.
|
||||||
|
urlValues := make(url.Values)
|
||||||
|
urlValues.Set("replication-reset-status", "")
|
||||||
|
if arn != "" {
|
||||||
|
urlValues.Set("arn", arn)
|
||||||
|
}
|
||||||
|
// Execute GET on bucket to get replication config.
|
||||||
|
resp, err := c.executeMethod(ctx, http.MethodGet, requestMetadata{
|
||||||
|
bucketName: bucketName,
|
||||||
|
queryValues: urlValues,
|
||||||
|
})
|
||||||
|
|
||||||
|
defer closeResponse(resp)
|
||||||
|
if err != nil {
|
||||||
|
return rinfo, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return rinfo, httpRespToErrorResponse(resp, bucketName, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = json.NewDecoder(resp.Body).Decode(&rinfo); err != nil {
|
||||||
return rinfo, err
|
return rinfo, err
|
||||||
}
|
}
|
||||||
return rinfo, nil
|
return rinfo, nil
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api-restore.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api-restore.go
сгенерированный
поставляемый
@@ -175,7 +175,7 @@ func (c *Client) RestoreObject(ctx context.Context, bucketName, objectName, vers
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if resp.StatusCode != http.StatusAccepted {
|
if resp.StatusCode != http.StatusAccepted && resp.StatusCode != http.StatusOK {
|
||||||
return httpRespToErrorResponse(resp, bucketName, "")
|
return httpRespToErrorResponse(resp, bucketName, "")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
6
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
6
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
@@ -111,7 +111,7 @@ type Options struct {
|
|||||||
// Global constants.
|
// Global constants.
|
||||||
const (
|
const (
|
||||||
libraryName = "minio-go"
|
libraryName = "minio-go"
|
||||||
libraryVersion = "v7.0.21"
|
libraryVersion = "v7.0.23"
|
||||||
)
|
)
|
||||||
|
|
||||||
// User Agent should always following the below style.
|
// User Agent should always following the below style.
|
||||||
@@ -875,10 +875,14 @@ func (c *Client) makeTargetURL(bucketName, objectName, bucketLocation string, is
|
|||||||
if h, p, err := net.SplitHostPort(host); err == nil {
|
if h, p, err := net.SplitHostPort(host); err == nil {
|
||||||
if scheme == "http" && p == "80" || scheme == "https" && p == "443" {
|
if scheme == "http" && p == "80" || scheme == "https" && p == "443" {
|
||||||
host = h
|
host = h
|
||||||
|
if ip := net.ParseIP(h); ip != nil && ip.To16() != nil {
|
||||||
|
host = "[" + h + "]"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
urlStr := scheme + "://" + host + "/"
|
urlStr := scheme + "://" + host + "/"
|
||||||
|
|
||||||
// Make URL only if bucketName is available, otherwise use the
|
// Make URL only if bucketName is available, otherwise use the
|
||||||
// endpoint URL.
|
// endpoint URL.
|
||||||
if bucketName != "" {
|
if bucketName != "" {
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/functional_tests.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/functional_tests.go
сгенерированный
поставляемый
@@ -8143,6 +8143,8 @@ func testDecryptedCopyObject() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer cleanupBucket(bucketName, c)
|
||||||
|
|
||||||
encryption := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+objectName))
|
encryption := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+objectName))
|
||||||
_, err = c.PutObject(context.Background(), bucketName, objectName, bytes.NewReader(bytes.Repeat([]byte("a"), 1024*1024)), 1024*1024, minio.PutObjectOptions{
|
_, err = c.PutObject(context.Background(), bucketName, objectName, bytes.NewReader(bytes.Repeat([]byte("a"), 1024*1024)), 1024*1024, minio.PutObjectOptions{
|
||||||
ServerSideEncryption: encryption,
|
ServerSideEncryption: encryption,
|
||||||
|
|||||||
20
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
20
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
@@ -22,6 +22,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/rs/xid"
|
"github.com/rs/xid"
|
||||||
@@ -726,6 +727,21 @@ type ResyncTargetsInfo struct {
|
|||||||
|
|
||||||
// ResyncTarget provides the replica resources and resetID to initiate resync replication.
|
// ResyncTarget provides the replica resources and resetID to initiate resync replication.
|
||||||
type ResyncTarget struct {
|
type ResyncTarget struct {
|
||||||
Arn string `json:"arn"`
|
Arn string `json:"arn"`
|
||||||
ResetID string `json:"resetid"`
|
ResetID string `json:"resetid"`
|
||||||
|
StartTime time.Time `json:"startTime,omitempty"`
|
||||||
|
EndTime time.Time `json:"endTime,omitempty"`
|
||||||
|
// Status of resync operation
|
||||||
|
ResyncStatus string `json:"resyncStatus,omitempty"`
|
||||||
|
// Completed size in bytes
|
||||||
|
ReplicatedSize int64 `json:"completedReplicationSize,omitempty"`
|
||||||
|
// Failed size in bytes
|
||||||
|
FailedSize int64 `json:"failedReplicationSize,omitempty"`
|
||||||
|
// Total number of failed operations
|
||||||
|
FailedCount int64 `json:"failedReplicationCount,omitempty"`
|
||||||
|
// Total number of failed operations
|
||||||
|
ReplicatedCount int64 `json:"replicationCount,omitempty"`
|
||||||
|
// Last bucket/object replicated.
|
||||||
|
Bucket string `json:"bucket,omitempty"`
|
||||||
|
Object string `json:"object,omitempty"`
|
||||||
}
|
}
|
||||||
|
|||||||
4
vendor/github.com/minio/minio-go/v7/utils.go
сгенерированный
поставляемый
4
vendor/github.com/minio/minio-go/v7/utils.go
сгенерированный
поставляемый
@@ -517,11 +517,11 @@ var md5Pool = sync.Pool{New: func() interface{} { return md5.New() }}
|
|||||||
var sha256Pool = sync.Pool{New: func() interface{} { return sha256.New() }}
|
var sha256Pool = sync.Pool{New: func() interface{} { return sha256.New() }}
|
||||||
|
|
||||||
func newMd5Hasher() md5simd.Hasher {
|
func newMd5Hasher() md5simd.Hasher {
|
||||||
return hashWrapper{Hash: md5Pool.New().(hash.Hash), isMD5: true}
|
return hashWrapper{Hash: md5Pool.Get().(hash.Hash), isMD5: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSHA256Hasher() md5simd.Hasher {
|
func newSHA256Hasher() md5simd.Hasher {
|
||||||
return hashWrapper{Hash: sha256Pool.New().(hash.Hash), isSHA256: true}
|
return hashWrapper{Hash: sha256Pool.Get().(hash.Hash), isSHA256: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
// hashWrapper implements the md5simd.Hasher interface.
|
// hashWrapper implements the md5simd.Hasher interface.
|
||||||
|
|||||||
21
vendor/github.com/yuin/goldmark/README.md
сгенерированный
поставляемый
21
vendor/github.com/yuin/goldmark/README.md
сгенерированный
поставляемый
@@ -387,28 +387,29 @@ blackfriday v2 seems to be the fastest, but as it is not CommonMark compliant, i
|
|||||||
goldmark, meanwhile, builds a clean, extensible AST structure, achieves full compliance with
|
goldmark, meanwhile, builds a clean, extensible AST structure, achieves full compliance with
|
||||||
CommonMark, and consumes less memory, all while being reasonably fast.
|
CommonMark, and consumes less memory, all while being reasonably fast.
|
||||||
|
|
||||||
|
- MBP 2019 13″(i5, 16GB), Go1.17
|
||||||
|
|
||||||
```
|
```
|
||||||
goos: darwin
|
BenchmarkMarkdown/Blackfriday-v2-8 302 3743747 ns/op 3290445 B/op 20050 allocs/op
|
||||||
goarch: amd64
|
BenchmarkMarkdown/GoldMark-8 280 4200974 ns/op 2559738 B/op 13435 allocs/op
|
||||||
BenchmarkMarkdown/Blackfriday-v2-12 326 3465240 ns/op 3298861 B/op 20047 allocs/op
|
BenchmarkMarkdown/CommonMark-8 226 5283686 ns/op 2702490 B/op 20792 allocs/op
|
||||||
BenchmarkMarkdown/GoldMark-12 303 3927494 ns/op 2574809 B/op 13853 allocs/op
|
BenchmarkMarkdown/Lute-8 12 92652857 ns/op 10602649 B/op 40555 allocs/op
|
||||||
BenchmarkMarkdown/CommonMark-12 244 4900853 ns/op 2753851 B/op 20527 allocs/op
|
BenchmarkMarkdown/GoMarkdown-8 13 81380167 ns/op 2245002 B/op 22889 allocs/op
|
||||||
BenchmarkMarkdown/Lute-12 130 9195245 ns/op 9175030 B/op 123534 allocs/op
|
|
||||||
BenchmarkMarkdown/GoMarkdown-12 9 113541994 ns/op 2187472 B/op 22173 allocs/op
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### against cmark (CommonMark reference implementation written in C)
|
### against cmark (CommonMark reference implementation written in C)
|
||||||
|
|
||||||
|
- MBP 2019 13″(i5, 16GB), Go1.17
|
||||||
|
|
||||||
```
|
```
|
||||||
----------- cmark -----------
|
----------- cmark -----------
|
||||||
file: _data.md
|
file: _data.md
|
||||||
iteration: 50
|
iteration: 50
|
||||||
average: 0.0037760639 sec
|
average: 0.0044073057 sec
|
||||||
go run ./goldmark_benchmark.go
|
|
||||||
------- goldmark -------
|
------- goldmark -------
|
||||||
file: _data.md
|
file: _data.md
|
||||||
iteration: 50
|
iteration: 50
|
||||||
average: 0.0040964230 sec
|
average: 0.0041611990 sec
|
||||||
```
|
```
|
||||||
|
|
||||||
As you can see, goldmark's performance is on par with cmark's.
|
As you can see, goldmark's performance is on par with cmark's.
|
||||||
|
|||||||
15
vendor/github.com/yuin/goldmark/ast/block.go
сгенерированный
поставляемый
15
vendor/github.com/yuin/goldmark/ast/block.go
сгенерированный
поставляемый
@@ -87,7 +87,20 @@ func (n *Document) Meta() map[string]interface{} {
|
|||||||
|
|
||||||
// SetMeta sets given metadata to this document.
|
// SetMeta sets given metadata to this document.
|
||||||
func (n *Document) SetMeta(meta map[string]interface{}) {
|
func (n *Document) SetMeta(meta map[string]interface{}) {
|
||||||
n.meta = meta
|
if n.meta == nil {
|
||||||
|
n.meta = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
for k, v := range meta {
|
||||||
|
n.meta[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMeta adds given metadata to this document.
|
||||||
|
func (n *Document) AddMeta(key string, value interface{}) {
|
||||||
|
if n.meta == nil {
|
||||||
|
n.meta = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
n.meta[key] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDocument returns a new Document node.
|
// NewDocument returns a new Document node.
|
||||||
|
|||||||
24
vendor/github.com/yuin/goldmark/extension/typographer.go
сгенерированный
поставляемый
24
vendor/github.com/yuin/goldmark/extension/typographer.go
сгенерированный
поставляемый
@@ -160,7 +160,7 @@ func NewTypographerParser(opts ...TypographerOption) parser.InlineParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *typographerParser) Trigger() []byte {
|
func (s *typographerParser) Trigger() []byte {
|
||||||
return []byte{'\'', '"', '-', '.', '<', '>'}
|
return []byte{'\'', '"', '-', '.', ',', '<', '>', '*', '['}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser.Context) gast.Node {
|
func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser.Context) gast.Node {
|
||||||
@@ -230,6 +230,13 @@ func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// special cases: 'twas, 'em, 'net
|
||||||
|
if len(line) > 1 && (unicode.IsPunct(before) || unicode.IsSpace(before)) && (line[1] == 't' || line[1] == 'e' || line[1] == 'n' || line[1] == 'l') {
|
||||||
|
node := gast.NewString(s.Substitutions[Apostrophe])
|
||||||
|
node.SetCode(true)
|
||||||
|
block.Advance(1)
|
||||||
|
return node
|
||||||
|
}
|
||||||
// Convert normal apostrophes. This is probably more flexible than necessary but
|
// Convert normal apostrophes. This is probably more flexible than necessary but
|
||||||
// converts any apostrophe in between two alphanumerics.
|
// converts any apostrophe in between two alphanumerics.
|
||||||
if len(line) > 1 && (unicode.IsDigit(before) || unicode.IsLetter(before)) && (unicode.IsLetter(util.ToRune(line, 1))) {
|
if len(line) > 1 && (unicode.IsDigit(before) || unicode.IsLetter(before)) && (unicode.IsLetter(util.ToRune(line, 1))) {
|
||||||
@@ -241,7 +248,7 @@ func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser
|
|||||||
}
|
}
|
||||||
if s.Substitutions[LeftSingleQuote] != nil && d.CanOpen && !d.CanClose {
|
if s.Substitutions[LeftSingleQuote] != nil && d.CanOpen && !d.CanClose {
|
||||||
nt := LeftSingleQuote
|
nt := LeftSingleQuote
|
||||||
// special cases: Alice's, I'm ,Don't, You'd
|
// special cases: Alice's, I'm, Don't, You'd
|
||||||
if len(line) > 1 && (line[1] == 's' || line[1] == 'm' || line[1] == 't' || line[1] == 'd') && (len(line) < 3 || util.IsPunct(line[2]) || util.IsSpace(line[2])) {
|
if len(line) > 1 && (line[1] == 's' || line[1] == 'm' || line[1] == 't' || line[1] == 'd') && (len(line) < 3 || util.IsPunct(line[2]) || util.IsSpace(line[2])) {
|
||||||
nt = RightSingleQuote
|
nt = RightSingleQuote
|
||||||
}
|
}
|
||||||
@@ -258,9 +265,18 @@ func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser
|
|||||||
block.Advance(1)
|
block.Advance(1)
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
if s.Substitutions[RightSingleQuote] != nil {
|
||||||
|
// plural possesives and abbreviations: Smiths', doin'
|
||||||
|
if len(line) > 1 && unicode.IsSpace(util.ToRune(line, 0)) || unicode.IsPunct(util.ToRune(line, 0)) && (len(line) > 2 && !unicode.IsDigit(util.ToRune(line, 1))) {
|
||||||
|
node := gast.NewString(s.Substitutions[RightSingleQuote])
|
||||||
|
node.SetCode(true)
|
||||||
|
block.Advance(1)
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
}
|
||||||
if s.Substitutions[RightSingleQuote] != nil && counter.Single > 0 {
|
if s.Substitutions[RightSingleQuote] != nil && counter.Single > 0 {
|
||||||
isClose := d.CanClose && !d.CanOpen
|
isClose := d.CanClose && !d.CanOpen
|
||||||
maybeClose := d.CanClose && d.CanOpen && len(line) > 1 && (line[1] == ',' || line[1] == '.' || line[1] == '!' || line[1] == '?') && (len(line) == 2 || (len(line) > 2 && util.IsPunct(line[2]) || util.IsSpace(line[2])))
|
maybeClose := d.CanClose && d.CanOpen && len(line) > 1 && unicode.IsPunct(util.ToRune(line, 1)) && (len(line) == 2 || (len(line) > 2 && util.IsPunct(line[2]) || util.IsSpace(line[2])))
|
||||||
if isClose || maybeClose {
|
if isClose || maybeClose {
|
||||||
node := gast.NewString(s.Substitutions[RightSingleQuote])
|
node := gast.NewString(s.Substitutions[RightSingleQuote])
|
||||||
node.SetCode(true)
|
node.SetCode(true)
|
||||||
@@ -280,7 +296,7 @@ func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser
|
|||||||
}
|
}
|
||||||
if s.Substitutions[RightDoubleQuote] != nil && counter.Double > 0 {
|
if s.Substitutions[RightDoubleQuote] != nil && counter.Double > 0 {
|
||||||
isClose := d.CanClose && !d.CanOpen
|
isClose := d.CanClose && !d.CanOpen
|
||||||
maybeClose := d.CanClose && d.CanOpen && len(line) > 1 && (line[1] == ',' || line[1] == '.' || line[1] == '!' || line[1] == '?') && (len(line) == 2 || (len(line) > 2 && util.IsPunct(line[2]) || util.IsSpace(line[2])))
|
maybeClose := d.CanClose && d.CanOpen && len(line) > 1 && (unicode.IsPunct(util.ToRune(line, 1))) && (len(line) == 2 || (len(line) > 2 && util.IsPunct(line[2]) || util.IsSpace(line[2])))
|
||||||
if isClose || maybeClose {
|
if isClose || maybeClose {
|
||||||
// special case: "Monitor 21""
|
// special case: "Monitor 21""
|
||||||
if len(line) > 1 && line[1] == '"' && unicode.IsDigit(before) {
|
if len(line) > 1 && line[1] == '"' && unicode.IsDigit(before) {
|
||||||
|
|||||||
427
vendor/golang.org/x/crypto/acme/acme.go
сгенерированный
поставляемый
427
vendor/golang.org/x/crypto/acme/acme.go
сгенерированный
поставляемый
@@ -3,17 +3,20 @@
|
|||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// Package acme provides an implementation of the
|
// Package acme provides an implementation of the
|
||||||
// Automatic Certificate Management Environment (ACME) spec.
|
// Automatic Certificate Management Environment (ACME) spec,
|
||||||
// The initial implementation was based on ACME draft-02 and
|
// most famously used by Let's Encrypt.
|
||||||
// is now being extended to comply with RFC 8555.
|
//
|
||||||
// See https://tools.ietf.org/html/draft-ietf-acme-acme-02
|
// The initial implementation of this package was based on an early version
|
||||||
// and https://tools.ietf.org/html/rfc8555 for details.
|
// of the spec. The current implementation supports only the modern
|
||||||
|
// RFC 8555 but some of the old API surface remains for compatibility.
|
||||||
|
// While code using the old API will still compile, it will return an error.
|
||||||
|
// Note the deprecation comments to update your code.
|
||||||
|
//
|
||||||
|
// See https://tools.ietf.org/html/rfc8555 for the spec.
|
||||||
//
|
//
|
||||||
// Most common scenarios will want to use autocert subdirectory instead,
|
// Most common scenarios will want to use autocert subdirectory instead,
|
||||||
// which provides automatic access to certificates from Let's Encrypt
|
// which provides automatic access to certificates from Let's Encrypt
|
||||||
// and any other ACME-based CA.
|
// and any other ACME-based CA.
|
||||||
//
|
|
||||||
// This package is a work in progress and makes no API stability promises.
|
|
||||||
package acme
|
package acme
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -33,8 +36,6 @@ import (
|
|||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -72,6 +73,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Client is an ACME client.
|
// Client is an ACME client.
|
||||||
|
//
|
||||||
// The only required field is Key. An example of creating a client with a new key
|
// The only required field is Key. An example of creating a client with a new key
|
||||||
// is as follows:
|
// is as follows:
|
||||||
//
|
//
|
||||||
@@ -145,9 +147,6 @@ type Client struct {
|
|||||||
func (c *Client) accountKID(ctx context.Context) KeyID {
|
func (c *Client) accountKID(ctx context.Context) KeyID {
|
||||||
c.cacheMu.Lock()
|
c.cacheMu.Lock()
|
||||||
defer c.cacheMu.Unlock()
|
defer c.cacheMu.Unlock()
|
||||||
if !c.dir.rfcCompliant() {
|
|
||||||
return noKeyID
|
|
||||||
}
|
|
||||||
if c.KID != noKeyID {
|
if c.KID != noKeyID {
|
||||||
return c.KID
|
return c.KID
|
||||||
}
|
}
|
||||||
@@ -159,6 +158,8 @@ func (c *Client) accountKID(ctx context.Context) KeyID {
|
|||||||
return c.KID
|
return c.KID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var errPreRFC = errors.New("acme: server does not support the RFC 8555 version of ACME")
|
||||||
|
|
||||||
// Discover performs ACME server discovery using c.DirectoryURL.
|
// Discover performs ACME server discovery using c.DirectoryURL.
|
||||||
//
|
//
|
||||||
// It caches successful result. So, subsequent calls will not result in
|
// It caches successful result. So, subsequent calls will not result in
|
||||||
@@ -179,53 +180,36 @@ func (c *Client) Discover(ctx context.Context) (Directory, error) {
|
|||||||
c.addNonce(res.Header)
|
c.addNonce(res.Header)
|
||||||
|
|
||||||
var v struct {
|
var v struct {
|
||||||
Reg string `json:"new-reg"`
|
Reg string `json:"newAccount"`
|
||||||
RegRFC string `json:"newAccount"`
|
Authz string `json:"newAuthz"`
|
||||||
Authz string `json:"new-authz"`
|
Order string `json:"newOrder"`
|
||||||
AuthzRFC string `json:"newAuthz"`
|
Revoke string `json:"revokeCert"`
|
||||||
OrderRFC string `json:"newOrder"`
|
Nonce string `json:"newNonce"`
|
||||||
Cert string `json:"new-cert"`
|
KeyChange string `json:"keyChange"`
|
||||||
Revoke string `json:"revoke-cert"`
|
Meta struct {
|
||||||
RevokeRFC string `json:"revokeCert"`
|
Terms string `json:"termsOfService"`
|
||||||
NonceRFC string `json:"newNonce"`
|
Website string `json:"website"`
|
||||||
KeyChangeRFC string `json:"keyChange"`
|
CAA []string `json:"caaIdentities"`
|
||||||
Meta struct {
|
ExternalAcct bool `json:"externalAccountRequired"`
|
||||||
Terms string `json:"terms-of-service"`
|
|
||||||
TermsRFC string `json:"termsOfService"`
|
|
||||||
WebsiteRFC string `json:"website"`
|
|
||||||
CAA []string `json:"caa-identities"`
|
|
||||||
CAARFC []string `json:"caaIdentities"`
|
|
||||||
ExternalAcctRFC bool `json:"externalAccountRequired"`
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := json.NewDecoder(res.Body).Decode(&v); err != nil {
|
if err := json.NewDecoder(res.Body).Decode(&v); err != nil {
|
||||||
return Directory{}, err
|
return Directory{}, err
|
||||||
}
|
}
|
||||||
if v.OrderRFC == "" {
|
if v.Order == "" {
|
||||||
// Non-RFC compliant ACME CA.
|
return Directory{}, errPreRFC
|
||||||
c.dir = &Directory{
|
|
||||||
RegURL: v.Reg,
|
|
||||||
AuthzURL: v.Authz,
|
|
||||||
CertURL: v.Cert,
|
|
||||||
RevokeURL: v.Revoke,
|
|
||||||
Terms: v.Meta.Terms,
|
|
||||||
Website: v.Meta.WebsiteRFC,
|
|
||||||
CAA: v.Meta.CAA,
|
|
||||||
}
|
|
||||||
return *c.dir, nil
|
|
||||||
}
|
}
|
||||||
// RFC compliant ACME CA.
|
|
||||||
c.dir = &Directory{
|
c.dir = &Directory{
|
||||||
RegURL: v.RegRFC,
|
RegURL: v.Reg,
|
||||||
AuthzURL: v.AuthzRFC,
|
AuthzURL: v.Authz,
|
||||||
OrderURL: v.OrderRFC,
|
OrderURL: v.Order,
|
||||||
RevokeURL: v.RevokeRFC,
|
RevokeURL: v.Revoke,
|
||||||
NonceURL: v.NonceRFC,
|
NonceURL: v.Nonce,
|
||||||
KeyChangeURL: v.KeyChangeRFC,
|
KeyChangeURL: v.KeyChange,
|
||||||
Terms: v.Meta.TermsRFC,
|
Terms: v.Meta.Terms,
|
||||||
Website: v.Meta.WebsiteRFC,
|
Website: v.Meta.Website,
|
||||||
CAA: v.Meta.CAARFC,
|
CAA: v.Meta.CAA,
|
||||||
ExternalAccountRequired: v.Meta.ExternalAcctRFC,
|
ExternalAccountRequired: v.Meta.ExternalAcct,
|
||||||
}
|
}
|
||||||
return *c.dir, nil
|
return *c.dir, nil
|
||||||
}
|
}
|
||||||
@@ -237,55 +221,11 @@ func (c *Client) directoryURL() string {
|
|||||||
return LetsEncryptURL
|
return LetsEncryptURL
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateCert requests a new certificate using the Certificate Signing Request csr encoded in DER format.
|
// CreateCert was part of the old version of ACME. It is incompatible with RFC 8555.
|
||||||
// It is incompatible with RFC 8555. Callers should use CreateOrderCert when interfacing
|
|
||||||
// with an RFC-compliant CA.
|
|
||||||
//
|
//
|
||||||
// The exp argument indicates the desired certificate validity duration. CA may issue a certificate
|
// Deprecated: this was for the pre-RFC 8555 version of ACME. Callers should use CreateOrderCert.
|
||||||
// with a different duration.
|
|
||||||
// If the bundle argument is true, the returned value will also contain the CA (issuer) certificate chain.
|
|
||||||
//
|
|
||||||
// In the case where CA server does not provide the issued certificate in the response,
|
|
||||||
// CreateCert will poll certURL using c.FetchCert, which will result in additional round-trips.
|
|
||||||
// In such a scenario, the caller can cancel the polling with ctx.
|
|
||||||
//
|
|
||||||
// CreateCert returns an error if the CA's response or chain was unreasonably large.
|
|
||||||
// Callers are encouraged to parse the returned value to ensure the certificate is valid and has the expected features.
|
|
||||||
func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration, bundle bool) (der [][]byte, certURL string, err error) {
|
func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration, bundle bool) (der [][]byte, certURL string, err error) {
|
||||||
if _, err := c.Discover(ctx); err != nil {
|
return nil, "", errPreRFC
|
||||||
return nil, "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
req := struct {
|
|
||||||
Resource string `json:"resource"`
|
|
||||||
CSR string `json:"csr"`
|
|
||||||
NotBefore string `json:"notBefore,omitempty"`
|
|
||||||
NotAfter string `json:"notAfter,omitempty"`
|
|
||||||
}{
|
|
||||||
Resource: "new-cert",
|
|
||||||
CSR: base64.RawURLEncoding.EncodeToString(csr),
|
|
||||||
}
|
|
||||||
now := timeNow()
|
|
||||||
req.NotBefore = now.Format(time.RFC3339)
|
|
||||||
if exp > 0 {
|
|
||||||
req.NotAfter = now.Add(exp).Format(time.RFC3339)
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := c.post(ctx, nil, c.dir.CertURL, req, wantStatus(http.StatusCreated))
|
|
||||||
if err != nil {
|
|
||||||
return nil, "", err
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
curl := res.Header.Get("Location") // cert permanent URL
|
|
||||||
if res.ContentLength == 0 {
|
|
||||||
// no cert in the body; poll until we get it
|
|
||||||
cert, err := c.FetchCert(ctx, curl, bundle)
|
|
||||||
return cert, curl, err
|
|
||||||
}
|
|
||||||
// slurp issued cert and CA chain, if requested
|
|
||||||
cert, err := c.responseCert(ctx, res, bundle)
|
|
||||||
return cert, curl, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchCert retrieves already issued certificate from the given url, in DER format.
|
// FetchCert retrieves already issued certificate from the given url, in DER format.
|
||||||
@@ -299,20 +239,10 @@ func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration,
|
|||||||
// Callers are encouraged to parse the returned value to ensure the certificate is valid
|
// Callers are encouraged to parse the returned value to ensure the certificate is valid
|
||||||
// and has expected features.
|
// and has expected features.
|
||||||
func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]byte, error) {
|
func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]byte, error) {
|
||||||
dir, err := c.Discover(ctx)
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if dir.rfcCompliant() {
|
return c.fetchCertRFC(ctx, url, bundle)
|
||||||
return c.fetchCertRFC(ctx, url, bundle)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legacy non-authenticated GET request.
|
|
||||||
res, err := c.get(ctx, url, wantStatus(http.StatusOK))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return c.responseCert(ctx, res, bundle)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RevokeCert revokes a previously issued certificate cert, provided in DER format.
|
// RevokeCert revokes a previously issued certificate cert, provided in DER format.
|
||||||
@@ -322,30 +252,10 @@ func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]by
|
|||||||
// For instance, the key pair of the certificate may be authorized.
|
// For instance, the key pair of the certificate may be authorized.
|
||||||
// If the key is nil, c.Key is used instead.
|
// If the key is nil, c.Key is used instead.
|
||||||
func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte, reason CRLReasonCode) error {
|
func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte, reason CRLReasonCode) error {
|
||||||
dir, err := c.Discover(ctx)
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if dir.rfcCompliant() {
|
return c.revokeCertRFC(ctx, key, cert, reason)
|
||||||
return c.revokeCertRFC(ctx, key, cert, reason)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legacy CA.
|
|
||||||
body := &struct {
|
|
||||||
Resource string `json:"resource"`
|
|
||||||
Cert string `json:"certificate"`
|
|
||||||
Reason int `json:"reason"`
|
|
||||||
}{
|
|
||||||
Resource: "revoke-cert",
|
|
||||||
Cert: base64.RawURLEncoding.EncodeToString(cert),
|
|
||||||
Reason: int(reason),
|
|
||||||
}
|
|
||||||
res, err := c.post(ctx, key, dir.RevokeURL, body, wantStatus(http.StatusOK))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AcceptTOS always returns true to indicate the acceptance of a CA's Terms of Service
|
// AcceptTOS always returns true to indicate the acceptance of a CA's Terms of Service
|
||||||
@@ -368,75 +278,33 @@ func (c *Client) Register(ctx context.Context, acct *Account, prompt func(tosURL
|
|||||||
if c.Key == nil {
|
if c.Key == nil {
|
||||||
return nil, errors.New("acme: client.Key must be set to Register")
|
return nil, errors.New("acme: client.Key must be set to Register")
|
||||||
}
|
}
|
||||||
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
dir, err := c.Discover(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if dir.rfcCompliant() {
|
return c.registerRFC(ctx, acct, prompt)
|
||||||
return c.registerRFC(ctx, acct, prompt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legacy ACME draft registration flow.
|
|
||||||
a, err := c.doReg(ctx, dir.RegURL, "new-reg", acct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var accept bool
|
|
||||||
if a.CurrentTerms != "" && a.CurrentTerms != a.AgreedTerms {
|
|
||||||
accept = prompt(a.CurrentTerms)
|
|
||||||
}
|
|
||||||
if accept {
|
|
||||||
a.AgreedTerms = a.CurrentTerms
|
|
||||||
a, err = c.UpdateReg(ctx, a)
|
|
||||||
}
|
|
||||||
return a, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetReg retrieves an existing account associated with c.Key.
|
// GetReg retrieves an existing account associated with c.Key.
|
||||||
//
|
//
|
||||||
// The url argument is an Account URI used with pre-RFC 8555 CAs.
|
// The url argument is a legacy artifact of the pre-RFC 8555 API
|
||||||
// It is ignored when interfacing with an RFC-compliant CA.
|
// and is ignored.
|
||||||
func (c *Client) GetReg(ctx context.Context, url string) (*Account, error) {
|
func (c *Client) GetReg(ctx context.Context, url string) (*Account, error) {
|
||||||
dir, err := c.Discover(ctx)
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if dir.rfcCompliant() {
|
return c.getRegRFC(ctx)
|
||||||
return c.getRegRFC(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legacy CA.
|
|
||||||
a, err := c.doReg(ctx, url, "reg", nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
a.URI = url
|
|
||||||
return a, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateReg updates an existing registration.
|
// UpdateReg updates an existing registration.
|
||||||
// It returns an updated account copy. The provided account is not modified.
|
// It returns an updated account copy. The provided account is not modified.
|
||||||
//
|
//
|
||||||
// When interfacing with RFC-compliant CAs, a.URI is ignored and the account URL
|
// The account's URI is ignored and the account URL associated with
|
||||||
// associated with c.Key is used instead.
|
// c.Key is used instead.
|
||||||
func (c *Client) UpdateReg(ctx context.Context, acct *Account) (*Account, error) {
|
func (c *Client) UpdateReg(ctx context.Context, acct *Account) (*Account, error) {
|
||||||
dir, err := c.Discover(ctx)
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if dir.rfcCompliant() {
|
return c.updateRegRFC(ctx, acct)
|
||||||
return c.updateRegRFC(ctx, acct)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legacy CA.
|
|
||||||
uri := acct.URI
|
|
||||||
a, err := c.doReg(ctx, uri, "reg", acct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
a.URI = uri
|
|
||||||
return a, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authorize performs the initial step in the pre-authorization flow,
|
// Authorize performs the initial step in the pre-authorization flow,
|
||||||
@@ -505,17 +373,11 @@ func (c *Client) authorize(ctx context.Context, typ, val string) (*Authorization
|
|||||||
// If a caller needs to poll an authorization until its status is final,
|
// If a caller needs to poll an authorization until its status is final,
|
||||||
// see the WaitAuthorization method.
|
// see the WaitAuthorization method.
|
||||||
func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) {
|
func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) {
|
||||||
dir, err := c.Discover(ctx)
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var res *http.Response
|
res, err := c.postAsGet(ctx, url, wantStatus(http.StatusOK))
|
||||||
if dir.rfcCompliant() {
|
|
||||||
res, err = c.postAsGet(ctx, url, wantStatus(http.StatusOK))
|
|
||||||
} else {
|
|
||||||
res, err = c.get(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted))
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -537,7 +399,6 @@ func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorizati
|
|||||||
//
|
//
|
||||||
// It does not revoke existing certificates.
|
// It does not revoke existing certificates.
|
||||||
func (c *Client) RevokeAuthorization(ctx context.Context, url string) error {
|
func (c *Client) RevokeAuthorization(ctx context.Context, url string) error {
|
||||||
// Required for c.accountKID() when in RFC mode.
|
|
||||||
if _, err := c.Discover(ctx); err != nil {
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -567,18 +428,11 @@ func (c *Client) RevokeAuthorization(ctx context.Context, url string) error {
|
|||||||
// In all other cases WaitAuthorization returns an error.
|
// In all other cases WaitAuthorization returns an error.
|
||||||
// If the Status is StatusInvalid, the returned error is of type *AuthorizationError.
|
// If the Status is StatusInvalid, the returned error is of type *AuthorizationError.
|
||||||
func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) {
|
func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) {
|
||||||
// Required for c.accountKID() when in RFC mode.
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
dir, err := c.Discover(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
getfn := c.postAsGet
|
|
||||||
if !dir.rfcCompliant() {
|
|
||||||
getfn = c.get
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
res, err := getfn(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted))
|
res, err := c.postAsGet(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -621,17 +475,11 @@ func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorizat
|
|||||||
//
|
//
|
||||||
// A client typically polls a challenge status using this method.
|
// A client typically polls a challenge status using this method.
|
||||||
func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) {
|
func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) {
|
||||||
// Required for c.accountKID() when in RFC mode.
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
dir, err := c.Discover(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
getfn := c.postAsGet
|
res, err := c.postAsGet(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted))
|
||||||
if !dir.rfcCompliant() {
|
|
||||||
getfn = c.get
|
|
||||||
}
|
|
||||||
res, err := getfn(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -649,29 +497,11 @@ func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, erro
|
|||||||
//
|
//
|
||||||
// The server will then perform the validation asynchronously.
|
// The server will then perform the validation asynchronously.
|
||||||
func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error) {
|
func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error) {
|
||||||
// Required for c.accountKID() when in RFC mode.
|
if _, err := c.Discover(ctx); err != nil {
|
||||||
dir, err := c.Discover(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var req interface{} = json.RawMessage("{}") // RFC-compliant CA
|
res, err := c.post(ctx, nil, chal.URI, json.RawMessage("{}"), wantStatus(
|
||||||
if !dir.rfcCompliant() {
|
|
||||||
auth, err := keyAuth(c.Key.Public(), chal.Token)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
req = struct {
|
|
||||||
Resource string `json:"resource"`
|
|
||||||
Type string `json:"type"`
|
|
||||||
Auth string `json:"keyAuthorization"`
|
|
||||||
}{
|
|
||||||
Resource: "challenge",
|
|
||||||
Type: chal.Type,
|
|
||||||
Auth: auth,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
res, err := c.post(ctx, nil, chal.URI, req, wantStatus(
|
|
||||||
http.StatusOK, // according to the spec
|
http.StatusOK, // according to the spec
|
||||||
http.StatusAccepted, // Let's Encrypt: see https://goo.gl/WsJ7VT (acme-divergences.md)
|
http.StatusAccepted, // Let's Encrypt: see https://goo.gl/WsJ7VT (acme-divergences.md)
|
||||||
))
|
))
|
||||||
@@ -722,7 +552,7 @@ func (c *Client) HTTP01ChallengePath(token string) string {
|
|||||||
|
|
||||||
// TLSSNI01ChallengeCert creates a certificate for TLS-SNI-01 challenge response.
|
// TLSSNI01ChallengeCert creates a certificate for TLS-SNI-01 challenge response.
|
||||||
//
|
//
|
||||||
// Deprecated: This challenge type is unused in both draft-02 and RFC versions of ACME spec.
|
// Deprecated: This challenge type is unused in both draft-02 and RFC versions of the ACME spec.
|
||||||
func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) {
|
func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) {
|
||||||
ka, err := keyAuth(c.Key.Public(), token)
|
ka, err := keyAuth(c.Key.Public(), token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -740,7 +570,7 @@ func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tl
|
|||||||
|
|
||||||
// TLSSNI02ChallengeCert creates a certificate for TLS-SNI-02 challenge response.
|
// TLSSNI02ChallengeCert creates a certificate for TLS-SNI-02 challenge response.
|
||||||
//
|
//
|
||||||
// Deprecated: This challenge type is unused in both draft-02 and RFC versions of ACME spec.
|
// Deprecated: This challenge type is unused in both draft-02 and RFC versions of the ACME spec.
|
||||||
func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) {
|
func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) {
|
||||||
b := sha256.Sum256([]byte(token))
|
b := sha256.Sum256([]byte(token))
|
||||||
h := hex.EncodeToString(b[:])
|
h := hex.EncodeToString(b[:])
|
||||||
@@ -807,63 +637,6 @@ func (c *Client) TLSALPN01ChallengeCert(token, domain string, opt ...CertOption)
|
|||||||
return tlsChallengeCert([]string{domain}, newOpt)
|
return tlsChallengeCert([]string{domain}, newOpt)
|
||||||
}
|
}
|
||||||
|
|
||||||
// doReg sends all types of registration requests the old way (pre-RFC world).
|
|
||||||
// The type of request is identified by typ argument, which is a "resource"
|
|
||||||
// in the ACME spec terms.
|
|
||||||
//
|
|
||||||
// A non-nil acct argument indicates whether the intention is to mutate data
|
|
||||||
// of the Account. Only Contact and Agreement of its fields are used
|
|
||||||
// in such cases.
|
|
||||||
func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Account) (*Account, error) {
|
|
||||||
req := struct {
|
|
||||||
Resource string `json:"resource"`
|
|
||||||
Contact []string `json:"contact,omitempty"`
|
|
||||||
Agreement string `json:"agreement,omitempty"`
|
|
||||||
}{
|
|
||||||
Resource: typ,
|
|
||||||
}
|
|
||||||
if acct != nil {
|
|
||||||
req.Contact = acct.Contact
|
|
||||||
req.Agreement = acct.AgreedTerms
|
|
||||||
}
|
|
||||||
res, err := c.post(ctx, nil, url, req, wantStatus(
|
|
||||||
http.StatusOK, // updates and deletes
|
|
||||||
http.StatusCreated, // new account creation
|
|
||||||
http.StatusAccepted, // Let's Encrypt divergent implementation
|
|
||||||
))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
var v struct {
|
|
||||||
Contact []string
|
|
||||||
Agreement string
|
|
||||||
Authorizations string
|
|
||||||
Certificates string
|
|
||||||
}
|
|
||||||
if err := json.NewDecoder(res.Body).Decode(&v); err != nil {
|
|
||||||
return nil, fmt.Errorf("acme: invalid response: %v", err)
|
|
||||||
}
|
|
||||||
var tos string
|
|
||||||
if v := linkHeader(res.Header, "terms-of-service"); len(v) > 0 {
|
|
||||||
tos = v[0]
|
|
||||||
}
|
|
||||||
var authz string
|
|
||||||
if v := linkHeader(res.Header, "next"); len(v) > 0 {
|
|
||||||
authz = v[0]
|
|
||||||
}
|
|
||||||
return &Account{
|
|
||||||
URI: res.Header.Get("Location"),
|
|
||||||
Contact: v.Contact,
|
|
||||||
AgreedTerms: v.Agreement,
|
|
||||||
CurrentTerms: tos,
|
|
||||||
Authz: authz,
|
|
||||||
Authorizations: v.Authorizations,
|
|
||||||
Certificates: v.Certificates,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// popNonce returns a nonce value previously stored with c.addNonce
|
// popNonce returns a nonce value previously stored with c.addNonce
|
||||||
// or fetches a fresh one from c.dir.NonceURL.
|
// or fetches a fresh one from c.dir.NonceURL.
|
||||||
// If NonceURL is empty, it first tries c.directoryURL() and, failing that,
|
// If NonceURL is empty, it first tries c.directoryURL() and, failing that,
|
||||||
@@ -938,78 +711,6 @@ func nonceFromHeader(h http.Header) string {
|
|||||||
return h.Get("Replay-Nonce")
|
return h.Get("Replay-Nonce")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) responseCert(ctx context.Context, res *http.Response, bundle bool) ([][]byte, error) {
|
|
||||||
b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("acme: response stream: %v", err)
|
|
||||||
}
|
|
||||||
if len(b) > maxCertSize {
|
|
||||||
return nil, errors.New("acme: certificate is too big")
|
|
||||||
}
|
|
||||||
cert := [][]byte{b}
|
|
||||||
if !bundle {
|
|
||||||
return cert, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append CA chain cert(s).
|
|
||||||
// At least one is required according to the spec:
|
|
||||||
// https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-6.3.1
|
|
||||||
up := linkHeader(res.Header, "up")
|
|
||||||
if len(up) == 0 {
|
|
||||||
return nil, errors.New("acme: rel=up link not found")
|
|
||||||
}
|
|
||||||
if len(up) > maxChainLen {
|
|
||||||
return nil, errors.New("acme: rel=up link is too large")
|
|
||||||
}
|
|
||||||
for _, url := range up {
|
|
||||||
cc, err := c.chainCert(ctx, url, 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cert = append(cert, cc...)
|
|
||||||
}
|
|
||||||
return cert, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// chainCert fetches CA certificate chain recursively by following "up" links.
|
|
||||||
// Each recursive call increments the depth by 1, resulting in an error
|
|
||||||
// if the recursion level reaches maxChainLen.
|
|
||||||
//
|
|
||||||
// First chainCert call starts with depth of 0.
|
|
||||||
func (c *Client) chainCert(ctx context.Context, url string, depth int) ([][]byte, error) {
|
|
||||||
if depth >= maxChainLen {
|
|
||||||
return nil, errors.New("acme: certificate chain is too deep")
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := c.get(ctx, url, wantStatus(http.StatusOK))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if len(b) > maxCertSize {
|
|
||||||
return nil, errors.New("acme: certificate is too big")
|
|
||||||
}
|
|
||||||
chain := [][]byte{b}
|
|
||||||
|
|
||||||
uplink := linkHeader(res.Header, "up")
|
|
||||||
if len(uplink) > maxChainLen {
|
|
||||||
return nil, errors.New("acme: certificate chain is too large")
|
|
||||||
}
|
|
||||||
for _, up := range uplink {
|
|
||||||
cc, err := c.chainCert(ctx, up, depth+1)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
chain = append(chain, cc...)
|
|
||||||
}
|
|
||||||
|
|
||||||
return chain, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// linkHeader returns URI-Reference values of all Link headers
|
// linkHeader returns URI-Reference values of all Link headers
|
||||||
// with relation-type rel.
|
// with relation-type rel.
|
||||||
// See https://tools.ietf.org/html/rfc5988#section-5 for details.
|
// See https://tools.ietf.org/html/rfc5988#section-5 for details.
|
||||||
@@ -1100,5 +801,5 @@ func encodePEM(typ string, b []byte) []byte {
|
|||||||
return pem.EncodeToMemory(pb)
|
return pem.EncodeToMemory(pb)
|
||||||
}
|
}
|
||||||
|
|
||||||
// timeNow is useful for testing for fixed current time.
|
// timeNow is time.Now, except in tests which can mess with it.
|
||||||
var timeNow = time.Now
|
var timeNow = time.Now
|
||||||
|
|||||||
112
vendor/golang.org/x/crypto/acme/autocert/autocert.go
сгенерированный
поставляемый
112
vendor/golang.org/x/crypto/acme/autocert/autocert.go
сгенерированный
поставляемый
@@ -47,6 +47,8 @@ var createCertRetryAfter = time.Minute
|
|||||||
// pseudoRand is safe for concurrent use.
|
// pseudoRand is safe for concurrent use.
|
||||||
var pseudoRand *lockedMathRand
|
var pseudoRand *lockedMathRand
|
||||||
|
|
||||||
|
var errPreRFC = errors.New("autocert: ACME server doesn't support RFC 8555")
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
src := mathrand.NewSource(time.Now().UnixNano())
|
src := mathrand.NewSource(time.Now().UnixNano())
|
||||||
pseudoRand = &lockedMathRand{rnd: mathrand.New(src)}
|
pseudoRand = &lockedMathRand{rnd: mathrand.New(src)}
|
||||||
@@ -456,7 +458,7 @@ func (m *Manager) cert(ctx context.Context, ck certKey) (*tls.Certificate, error
|
|||||||
leaf: cert.Leaf,
|
leaf: cert.Leaf,
|
||||||
}
|
}
|
||||||
m.state[ck] = s
|
m.state[ck] = s
|
||||||
go m.renew(ck, s.key, s.leaf.NotAfter)
|
go m.startRenew(ck, s.key, s.leaf.NotAfter)
|
||||||
return cert, nil
|
return cert, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,8 +584,9 @@ func (m *Manager) createCert(ctx context.Context, ck certKey) (*tls.Certificate,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
// Remove the failed state after some time,
|
// Remove the failed state after some time,
|
||||||
// making the manager call createCert again on the following TLS hello.
|
// making the manager call createCert again on the following TLS hello.
|
||||||
|
didRemove := testDidRemoveState // The lifetime of this timer is untracked, so copy mutable local state to avoid races.
|
||||||
time.AfterFunc(createCertRetryAfter, func() {
|
time.AfterFunc(createCertRetryAfter, func() {
|
||||||
defer testDidRemoveState(ck)
|
defer didRemove(ck)
|
||||||
m.stateMu.Lock()
|
m.stateMu.Lock()
|
||||||
defer m.stateMu.Unlock()
|
defer m.stateMu.Unlock()
|
||||||
// Verify the state hasn't changed and it's still invalid
|
// Verify the state hasn't changed and it's still invalid
|
||||||
@@ -601,7 +604,7 @@ func (m *Manager) createCert(ctx context.Context, ck certKey) (*tls.Certificate,
|
|||||||
}
|
}
|
||||||
state.cert = der
|
state.cert = der
|
||||||
state.leaf = leaf
|
state.leaf = leaf
|
||||||
go m.renew(ck, state.key, state.leaf.NotAfter)
|
go m.startRenew(ck, state.key, state.leaf.NotAfter)
|
||||||
return state.tlscert()
|
return state.tlscert()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -658,31 +661,19 @@ func (m *Manager) authorizedCert(ctx context.Context, key crypto.Signer, ck cert
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
if dir.OrderURL == "" {
|
||||||
var chain [][]byte
|
return nil, nil, errPreRFC
|
||||||
switch {
|
|
||||||
// Pre-RFC legacy CA.
|
|
||||||
case dir.OrderURL == "":
|
|
||||||
if err := m.verify(ctx, client, ck.domain); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
der, _, err := client.CreateCert(ctx, csr, 0, true)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
chain = der
|
|
||||||
// RFC 8555 compliant CA.
|
|
||||||
default:
|
|
||||||
o, err := m.verifyRFC(ctx, client, ck.domain)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
der, _, err := client.CreateOrderCert(ctx, o.FinalizeURL, csr, true)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
chain = der
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
o, err := m.verifyRFC(ctx, client, ck.domain)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
chain, _, err := client.CreateOrderCert(ctx, o.FinalizeURL, csr, true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
leaf, err = validCert(ck, chain, key, m.now())
|
leaf, err = validCert(ck, chain, key, m.now())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
@@ -690,69 +681,6 @@ func (m *Manager) authorizedCert(ctx context.Context, key crypto.Signer, ck cert
|
|||||||
return chain, leaf, nil
|
return chain, leaf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify runs the identifier (domain) pre-authorization flow for legacy CAs
|
|
||||||
// using each applicable ACME challenge type.
|
|
||||||
func (m *Manager) verify(ctx context.Context, client *acme.Client, domain string) error {
|
|
||||||
// Remove all hanging authorizations to reduce rate limit quotas
|
|
||||||
// after we're done.
|
|
||||||
var authzURLs []string
|
|
||||||
defer func() {
|
|
||||||
go m.deactivatePendingAuthz(authzURLs)
|
|
||||||
}()
|
|
||||||
|
|
||||||
// errs accumulates challenge failure errors, printed if all fail
|
|
||||||
errs := make(map[*acme.Challenge]error)
|
|
||||||
challengeTypes := m.supportedChallengeTypes()
|
|
||||||
var nextTyp int // challengeType index of the next challenge type to try
|
|
||||||
for {
|
|
||||||
// Start domain authorization and get the challenge.
|
|
||||||
authz, err := client.Authorize(ctx, domain)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
authzURLs = append(authzURLs, authz.URI)
|
|
||||||
// No point in accepting challenges if the authorization status
|
|
||||||
// is in a final state.
|
|
||||||
switch authz.Status {
|
|
||||||
case acme.StatusValid:
|
|
||||||
return nil // already authorized
|
|
||||||
case acme.StatusInvalid:
|
|
||||||
return fmt.Errorf("acme/autocert: invalid authorization %q", authz.URI)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pick the next preferred challenge.
|
|
||||||
var chal *acme.Challenge
|
|
||||||
for chal == nil && nextTyp < len(challengeTypes) {
|
|
||||||
chal = pickChallenge(challengeTypes[nextTyp], authz.Challenges)
|
|
||||||
nextTyp++
|
|
||||||
}
|
|
||||||
if chal == nil {
|
|
||||||
errorMsg := fmt.Sprintf("acme/autocert: unable to authorize %q", domain)
|
|
||||||
for chal, err := range errs {
|
|
||||||
errorMsg += fmt.Sprintf("; challenge %q failed with error: %v", chal.Type, err)
|
|
||||||
}
|
|
||||||
return errors.New(errorMsg)
|
|
||||||
}
|
|
||||||
cleanup, err := m.fulfill(ctx, client, chal, domain)
|
|
||||||
if err != nil {
|
|
||||||
errs[chal] = err
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer cleanup()
|
|
||||||
if _, err := client.Accept(ctx, chal); err != nil {
|
|
||||||
errs[chal] = err
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// A challenge is fulfilled and accepted: wait for the CA to validate.
|
|
||||||
if _, err := client.WaitAuthorization(ctx, authz.URI); err != nil {
|
|
||||||
errs[chal] = err
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// verifyRFC runs the identifier (domain) order-based authorization flow for RFC compliant CAs
|
// verifyRFC runs the identifier (domain) order-based authorization flow for RFC compliant CAs
|
||||||
// using each applicable ACME challenge type.
|
// using each applicable ACME challenge type.
|
||||||
func (m *Manager) verifyRFC(ctx context.Context, client *acme.Client, domain string) (*acme.Order, error) {
|
func (m *Manager) verifyRFC(ctx context.Context, client *acme.Client, domain string) (*acme.Order, error) {
|
||||||
@@ -966,7 +894,7 @@ func httpTokenCacheKey(tokenPath string) string {
|
|||||||
return path.Base(tokenPath) + "+http-01"
|
return path.Base(tokenPath) + "+http-01"
|
||||||
}
|
}
|
||||||
|
|
||||||
// renew starts a cert renewal timer loop, one per domain.
|
// startRenew starts a cert renewal timer loop, one per domain.
|
||||||
//
|
//
|
||||||
// The loop is scheduled in two cases:
|
// The loop is scheduled in two cases:
|
||||||
// - a cert was fetched from cache for the first time (wasn't in m.state)
|
// - a cert was fetched from cache for the first time (wasn't in m.state)
|
||||||
@@ -974,7 +902,7 @@ func httpTokenCacheKey(tokenPath string) string {
|
|||||||
//
|
//
|
||||||
// The key argument is a certificate private key.
|
// The key argument is a certificate private key.
|
||||||
// The exp argument is the cert expiration time (NotAfter).
|
// The exp argument is the cert expiration time (NotAfter).
|
||||||
func (m *Manager) renew(ck certKey, key crypto.Signer, exp time.Time) {
|
func (m *Manager) startRenew(ck certKey, key crypto.Signer, exp time.Time) {
|
||||||
m.renewalMu.Lock()
|
m.renewalMu.Lock()
|
||||||
defer m.renewalMu.Unlock()
|
defer m.renewalMu.Unlock()
|
||||||
if m.renewal[ck] != nil {
|
if m.renewal[ck] != nil {
|
||||||
|
|||||||
35
vendor/golang.org/x/crypto/acme/autocert/renewal.go
сгенерированный
поставляемый
35
vendor/golang.org/x/crypto/acme/autocert/renewal.go
сгенерированный
поставляемый
@@ -21,8 +21,9 @@ type domainRenewal struct {
|
|||||||
ck certKey
|
ck certKey
|
||||||
key crypto.Signer
|
key crypto.Signer
|
||||||
|
|
||||||
timerMu sync.Mutex
|
timerMu sync.Mutex
|
||||||
timer *time.Timer
|
timer *time.Timer
|
||||||
|
timerClose chan struct{} // if non-nil, renew closes this channel (and nils out the timer fields) instead of running
|
||||||
}
|
}
|
||||||
|
|
||||||
// start starts a cert renewal timer at the time
|
// start starts a cert renewal timer at the time
|
||||||
@@ -38,16 +39,28 @@ func (dr *domainRenewal) start(exp time.Time) {
|
|||||||
dr.timer = time.AfterFunc(dr.next(exp), dr.renew)
|
dr.timer = time.AfterFunc(dr.next(exp), dr.renew)
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop stops the cert renewal timer.
|
// stop stops the cert renewal timer and waits for any in-flight calls to renew
|
||||||
// If the timer is already stopped, calling stop is a noop.
|
// to complete. If the timer is already stopped, calling stop is a noop.
|
||||||
func (dr *domainRenewal) stop() {
|
func (dr *domainRenewal) stop() {
|
||||||
dr.timerMu.Lock()
|
dr.timerMu.Lock()
|
||||||
defer dr.timerMu.Unlock()
|
defer dr.timerMu.Unlock()
|
||||||
if dr.timer == nil {
|
for {
|
||||||
return
|
if dr.timer == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if dr.timer.Stop() {
|
||||||
|
dr.timer = nil
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
// dr.timer fired, and we acquired dr.timerMu before the renew callback did.
|
||||||
|
// (We know this because otherwise the renew callback would have reset dr.timer!)
|
||||||
|
timerClose := make(chan struct{})
|
||||||
|
dr.timerClose = timerClose
|
||||||
|
dr.timerMu.Unlock()
|
||||||
|
<-timerClose
|
||||||
|
dr.timerMu.Lock()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dr.timer.Stop()
|
|
||||||
dr.timer = nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// renew is called periodically by a timer.
|
// renew is called periodically by a timer.
|
||||||
@@ -55,7 +68,9 @@ func (dr *domainRenewal) stop() {
|
|||||||
func (dr *domainRenewal) renew() {
|
func (dr *domainRenewal) renew() {
|
||||||
dr.timerMu.Lock()
|
dr.timerMu.Lock()
|
||||||
defer dr.timerMu.Unlock()
|
defer dr.timerMu.Unlock()
|
||||||
if dr.timer == nil {
|
if dr.timerClose != nil {
|
||||||
|
close(dr.timerClose)
|
||||||
|
dr.timer, dr.timerClose = nil, nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,8 +82,8 @@ func (dr *domainRenewal) renew() {
|
|||||||
next = renewJitter / 2
|
next = renewJitter / 2
|
||||||
next += time.Duration(pseudoRand.int63n(int64(next)))
|
next += time.Duration(pseudoRand.int63n(int64(next)))
|
||||||
}
|
}
|
||||||
dr.timer = time.AfterFunc(next, dr.renew)
|
|
||||||
testDidRenewLoop(next, err)
|
testDidRenewLoop(next, err)
|
||||||
|
dr.timer = time.AfterFunc(next, dr.renew)
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateState locks and replaces the relevant Manager.state item with the given
|
// updateState locks and replaces the relevant Manager.state item with the given
|
||||||
|
|||||||
3
vendor/golang.org/x/crypto/acme/jws.go
сгенерированный
поставляемый
3
vendor/golang.org/x/crypto/acme/jws.go
сгенерированный
поставляемый
@@ -51,6 +51,9 @@ type jsonWebSignature struct {
|
|||||||
//
|
//
|
||||||
// See https://tools.ietf.org/html/rfc7515#section-7.
|
// See https://tools.ietf.org/html/rfc7515#section-7.
|
||||||
func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, url string) ([]byte, error) {
|
func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, url string) ([]byte, error) {
|
||||||
|
if key == nil {
|
||||||
|
return nil, errors.New("nil key")
|
||||||
|
}
|
||||||
alg, sha := jwsHasher(key.Public())
|
alg, sha := jwsHasher(key.Public())
|
||||||
if alg == "" || !sha.Available() {
|
if alg == "" || !sha.Available() {
|
||||||
return nil, ErrUnsupportedKey
|
return nil, ErrUnsupportedKey
|
||||||
|
|||||||
8
vendor/golang.org/x/crypto/acme/types.go
сгенерированный
поставляемый
8
vendor/golang.org/x/crypto/acme/types.go
сгенерированный
поставляемый
@@ -305,14 +305,6 @@ type Directory struct {
|
|||||||
ExternalAccountRequired bool
|
ExternalAccountRequired bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// rfcCompliant reports whether the ACME server implements RFC 8555.
|
|
||||||
// Note that some servers may have incomplete RFC implementation
|
|
||||||
// even if the returned value is true.
|
|
||||||
// If rfcCompliant reports false, the server most likely implements draft-02.
|
|
||||||
func (d *Directory) rfcCompliant() bool {
|
|
||||||
return d.OrderURL != ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// Order represents a client's request for a certificate.
|
// Order represents a client's request for a certificate.
|
||||||
// It tracks the request flow progress through to issuance.
|
// It tracks the request flow progress through to issuance.
|
||||||
type Order struct {
|
type Order struct {
|
||||||
|
|||||||
23
vendor/golang.org/x/sys/unix/ioctl_linux.go
сгенерированный
поставляемый
23
vendor/golang.org/x/sys/unix/ioctl_linux.go
сгенерированный
поставляемый
@@ -194,3 +194,26 @@ func ioctlIfreqData(fd int, req uint, value *ifreqData) error {
|
|||||||
// identical so pass *IfreqData directly.
|
// identical so pass *IfreqData directly.
|
||||||
return ioctlPtr(fd, req, unsafe.Pointer(value))
|
return ioctlPtr(fd, req, unsafe.Pointer(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an
|
||||||
|
// existing KCM socket, returning a structure containing the file descriptor of
|
||||||
|
// the new socket.
|
||||||
|
func IoctlKCMClone(fd int) (*KCMClone, error) {
|
||||||
|
var info KCMClone
|
||||||
|
if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlKCMAttach attaches a TCP socket and associated BPF program file
|
||||||
|
// descriptor to a multiplexor.
|
||||||
|
func IoctlKCMAttach(fd int, info KCMAttach) error {
|
||||||
|
return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor.
|
||||||
|
func IoctlKCMUnattach(fd int, info KCMUnattach) error {
|
||||||
|
return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))
|
||||||
|
}
|
||||||
|
|||||||
4
vendor/golang.org/x/sys/unix/mkerrors.sh
сгенерированный
поставляемый
4
vendor/golang.org/x/sys/unix/mkerrors.sh
сгенерированный
поставляемый
@@ -205,6 +205,7 @@ struct ltchars {
|
|||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
|
#include <linux/can/netlink.h>
|
||||||
#include <linux/can/raw.h>
|
#include <linux/can/raw.h>
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
#include <linux/cryptouser.h>
|
#include <linux/cryptouser.h>
|
||||||
@@ -231,6 +232,7 @@ struct ltchars {
|
|||||||
#include <linux/if_packet.h>
|
#include <linux/if_packet.h>
|
||||||
#include <linux/if_xdp.h>
|
#include <linux/if_xdp.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
#include <linux/kcm.h>
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/keyctl.h>
|
#include <linux/keyctl.h>
|
||||||
#include <linux/landlock.h>
|
#include <linux/landlock.h>
|
||||||
@@ -503,6 +505,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^O?XTABS$/ ||
|
$2 ~ /^O?XTABS$/ ||
|
||||||
$2 ~ /^TC[IO](ON|OFF)$/ ||
|
$2 ~ /^TC[IO](ON|OFF)$/ ||
|
||||||
$2 ~ /^IN_/ ||
|
$2 ~ /^IN_/ ||
|
||||||
|
$2 ~ /^KCM/ ||
|
||||||
$2 ~ /^LANDLOCK_/ ||
|
$2 ~ /^LANDLOCK_/ ||
|
||||||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||||
@@ -597,6 +600,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^DEVLINK_/ ||
|
$2 ~ /^DEVLINK_/ ||
|
||||||
$2 ~ /^ETHTOOL_/ ||
|
$2 ~ /^ETHTOOL_/ ||
|
||||||
$2 ~ /^LWTUNNEL_IP/ ||
|
$2 ~ /^LWTUNNEL_IP/ ||
|
||||||
|
$2 ~ /^ITIMER_/ ||
|
||||||
$2 !~ "WMESGLEN" &&
|
$2 !~ "WMESGLEN" &&
|
||||||
$2 ~ /^W[A-Z0-9]+$/ ||
|
$2 ~ /^W[A-Z0-9]+$/ ||
|
||||||
$2 ~/^PPPIOC/ ||
|
$2 ~/^PPPIOC/ ||
|
||||||
|
|||||||
55
vendor/golang.org/x/sys/unix/syscall_linux.go
сгенерированный
поставляемый
55
vendor/golang.org/x/sys/unix/syscall_linux.go
сгенерированный
поставляемый
@@ -14,6 +14,7 @@ package unix
|
|||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -249,6 +250,13 @@ func Getwd() (wd string, err error) {
|
|||||||
if n < 1 || n > len(buf) || buf[n-1] != 0 {
|
if n < 1 || n > len(buf) || buf[n-1] != 0 {
|
||||||
return "", EINVAL
|
return "", EINVAL
|
||||||
}
|
}
|
||||||
|
// In some cases, Linux can return a path that starts with the
|
||||||
|
// "(unreachable)" prefix, which can potentially be a valid relative
|
||||||
|
// path. To work around that, return ENOENT if path is not absolute.
|
||||||
|
if buf[0] != '/' {
|
||||||
|
return "", ENOENT
|
||||||
|
}
|
||||||
|
|
||||||
return string(buf[0 : n-1]), nil
|
return string(buf[0 : n-1]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2314,6 +2322,52 @@ type RemoteIovec struct {
|
|||||||
//sys shmdt(addr uintptr) (err error)
|
//sys shmdt(addr uintptr) (err error)
|
||||||
//sys shmget(key int, size int, flag int) (id int, err error)
|
//sys shmget(key int, size int, flag int) (id int, err error)
|
||||||
|
|
||||||
|
//sys getitimer(which int, currValue *Itimerval) (err error)
|
||||||
|
//sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)
|
||||||
|
|
||||||
|
// MakeItimerval creates an Itimerval from interval and value durations.
|
||||||
|
func MakeItimerval(interval, value time.Duration) Itimerval {
|
||||||
|
return Itimerval{
|
||||||
|
Interval: NsecToTimeval(interval.Nanoseconds()),
|
||||||
|
Value: NsecToTimeval(value.Nanoseconds()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A value which may be passed to the which parameter for Getitimer and
|
||||||
|
// Setitimer.
|
||||||
|
type ItimerWhich int
|
||||||
|
|
||||||
|
// Possible which values for Getitimer and Setitimer.
|
||||||
|
const (
|
||||||
|
ItimerReal ItimerWhich = ITIMER_REAL
|
||||||
|
ItimerVirtual ItimerWhich = ITIMER_VIRTUAL
|
||||||
|
ItimerProf ItimerWhich = ITIMER_PROF
|
||||||
|
)
|
||||||
|
|
||||||
|
// Getitimer wraps getitimer(2) to return the current value of the timer
|
||||||
|
// specified by which.
|
||||||
|
func Getitimer(which ItimerWhich) (Itimerval, error) {
|
||||||
|
var it Itimerval
|
||||||
|
if err := getitimer(int(which), &it); err != nil {
|
||||||
|
return Itimerval{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return it, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which.
|
||||||
|
// It returns the previous value of the timer.
|
||||||
|
//
|
||||||
|
// If the Itimerval argument is the zero value, the timer will be disarmed.
|
||||||
|
func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
||||||
|
var prev Itimerval
|
||||||
|
if err := setitimer(int(which), &it, &prev); err != nil {
|
||||||
|
return Itimerval{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return prev, nil
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unimplemented
|
* Unimplemented
|
||||||
*/
|
*/
|
||||||
@@ -2333,7 +2387,6 @@ type RemoteIovec struct {
|
|||||||
// GetMempolicy
|
// GetMempolicy
|
||||||
// GetRobustList
|
// GetRobustList
|
||||||
// GetThreadArea
|
// GetThreadArea
|
||||||
// Getitimer
|
|
||||||
// Getpmsg
|
// Getpmsg
|
||||||
// IoCancel
|
// IoCancel
|
||||||
// IoDestroy
|
// IoDestroy
|
||||||
|
|||||||
8
vendor/golang.org/x/sys/unix/syscall_linux_386.go
сгенерированный
поставляемый
8
vendor/golang.org/x/sys/unix/syscall_linux_386.go
сгенерированный
поставляемый
@@ -173,14 +173,6 @@ const (
|
|||||||
_SENDMMSG = 20
|
_SENDMMSG = 20
|
||||||
)
|
)
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
|
|
||||||
if e != 0 {
|
|
||||||
err = e
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
if e != 0 {
|
if e != 0 {
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
сгенерированный
поставляемый
@@ -62,7 +62,6 @@ func Stat(path string, stat *Stat_t) (err error) {
|
|||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
//sys Truncate(path string, length int64) (err error)
|
//sys Truncate(path string, length int64) (err error)
|
||||||
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
сгенерированный
поставляемый
@@ -27,7 +27,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
|||||||
return newoffset, nil
|
return newoffset, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
сгенерированный
поставляемый
@@ -66,7 +66,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
return ENOSYS
|
return ENOSYS
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
сгенерированный
поставляемый
@@ -48,7 +48,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
|||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
//sys Truncate(path string, length int64) (err error)
|
//sys Truncate(path string, length int64) (err error)
|
||||||
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
сгенерированный
поставляемый
@@ -41,7 +41,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
|||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
||||||
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
сгенерированный
поставляемый
@@ -43,7 +43,6 @@ import (
|
|||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||||
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
||||||
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
сгенерированный
поставляемый
@@ -45,7 +45,6 @@ package unix
|
|||||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||||
//sys Truncate(path string, length int64) (err error)
|
//sys Truncate(path string, length int64) (err error)
|
||||||
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
сгенерированный
поставляемый
@@ -65,7 +65,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
return ENOSYS
|
return ENOSYS
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
9
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
сгенерированный
поставляемый
9
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
сгенерированный
поставляемый
@@ -145,15 +145,6 @@ const (
|
|||||||
netSendMMsg = 20
|
netSendMMsg = 20
|
||||||
)
|
)
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) {
|
|
||||||
args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}
|
|
||||||
fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0)
|
|
||||||
if err != 0 {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return int(fd), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {
|
||||||
args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}
|
args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}
|
||||||
fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)
|
fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)
|
||||||
|
|||||||
1
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
сгенерированный
поставляемый
1
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
сгенерированный
поставляемый
@@ -42,7 +42,6 @@ package unix
|
|||||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
//sys Truncate(path string, length int64) (err error)
|
//sys Truncate(path string, length int64) (err error)
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
|||||||
20
vendor/golang.org/x/sys/unix/zerrors_linux.go
сгенерированный
поставляемый
20
vendor/golang.org/x/sys/unix/zerrors_linux.go
сгенерированный
поставляемый
@@ -260,6 +260,17 @@ const (
|
|||||||
BUS_USB = 0x3
|
BUS_USB = 0x3
|
||||||
BUS_VIRTUAL = 0x6
|
BUS_VIRTUAL = 0x6
|
||||||
CAN_BCM = 0x2
|
CAN_BCM = 0x2
|
||||||
|
CAN_CTRLMODE_3_SAMPLES = 0x4
|
||||||
|
CAN_CTRLMODE_BERR_REPORTING = 0x10
|
||||||
|
CAN_CTRLMODE_CC_LEN8_DLC = 0x100
|
||||||
|
CAN_CTRLMODE_FD = 0x20
|
||||||
|
CAN_CTRLMODE_FD_NON_ISO = 0x80
|
||||||
|
CAN_CTRLMODE_LISTENONLY = 0x2
|
||||||
|
CAN_CTRLMODE_LOOPBACK = 0x1
|
||||||
|
CAN_CTRLMODE_ONE_SHOT = 0x8
|
||||||
|
CAN_CTRLMODE_PRESUME_ACK = 0x40
|
||||||
|
CAN_CTRLMODE_TDC_AUTO = 0x200
|
||||||
|
CAN_CTRLMODE_TDC_MANUAL = 0x400
|
||||||
CAN_EFF_FLAG = 0x80000000
|
CAN_EFF_FLAG = 0x80000000
|
||||||
CAN_EFF_ID_BITS = 0x1d
|
CAN_EFF_ID_BITS = 0x1d
|
||||||
CAN_EFF_MASK = 0x1fffffff
|
CAN_EFF_MASK = 0x1fffffff
|
||||||
@@ -337,6 +348,7 @@ const (
|
|||||||
CAN_RTR_FLAG = 0x40000000
|
CAN_RTR_FLAG = 0x40000000
|
||||||
CAN_SFF_ID_BITS = 0xb
|
CAN_SFF_ID_BITS = 0xb
|
||||||
CAN_SFF_MASK = 0x7ff
|
CAN_SFF_MASK = 0x7ff
|
||||||
|
CAN_TERMINATION_DISABLED = 0x0
|
||||||
CAN_TP16 = 0x3
|
CAN_TP16 = 0x3
|
||||||
CAN_TP20 = 0x4
|
CAN_TP20 = 0x4
|
||||||
CAP_AUDIT_CONTROL = 0x1e
|
CAP_AUDIT_CONTROL = 0x1e
|
||||||
@@ -1268,9 +1280,14 @@ const (
|
|||||||
IP_XFRM_POLICY = 0x11
|
IP_XFRM_POLICY = 0x11
|
||||||
ISOFS_SUPER_MAGIC = 0x9660
|
ISOFS_SUPER_MAGIC = 0x9660
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
IUTF8 = 0x4000
|
IUTF8 = 0x4000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
JFFS2_SUPER_MAGIC = 0x72b6
|
JFFS2_SUPER_MAGIC = 0x72b6
|
||||||
|
KCMPROTO_CONNECTED = 0x0
|
||||||
|
KCM_RECV_DISABLE = 0x1
|
||||||
KEXEC_ARCH_386 = 0x30000
|
KEXEC_ARCH_386 = 0x30000
|
||||||
KEXEC_ARCH_68K = 0x40000
|
KEXEC_ARCH_68K = 0x40000
|
||||||
KEXEC_ARCH_AARCH64 = 0xb70000
|
KEXEC_ARCH_AARCH64 = 0xb70000
|
||||||
@@ -2443,6 +2460,9 @@ const (
|
|||||||
SIOCGSTAMPNS = 0x8907
|
SIOCGSTAMPNS = 0x8907
|
||||||
SIOCGSTAMPNS_OLD = 0x8907
|
SIOCGSTAMPNS_OLD = 0x8907
|
||||||
SIOCGSTAMP_OLD = 0x8906
|
SIOCGSTAMP_OLD = 0x8906
|
||||||
|
SIOCKCMATTACH = 0x89e0
|
||||||
|
SIOCKCMCLONE = 0x89e2
|
||||||
|
SIOCKCMUNATTACH = 0x89e1
|
||||||
SIOCOUTQNSD = 0x894b
|
SIOCOUTQNSD = 0x894b
|
||||||
SIOCPROTOPRIVATE = 0x89e0
|
SIOCPROTOPRIVATE = 0x89e0
|
||||||
SIOCRTMSG = 0x890d
|
SIOCRTMSG = 0x890d
|
||||||
|
|||||||
20
vendor/golang.org/x/sys/unix/zsyscall_linux.go
сгенерированный
поставляемый
20
vendor/golang.org/x/sys/unix/zsyscall_linux.go
сгенерированный
поставляемый
@@ -2032,3 +2032,23 @@ func shmget(key int, size int, flag int) (id int, err error) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getitimer(which int, currValue *Itimerval) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
сгенерированный
поставляемый
@@ -444,17 +444,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
сгенерированный
поставляемый
@@ -46,17 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
сгенерированный
поставляемый
@@ -389,17 +389,6 @@ func Truncate(path string, length int64) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
сгенерированный
поставляемый
@@ -344,17 +344,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
сгенерированный
поставляемый
@@ -399,17 +399,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
сгенерированный
поставляемый
@@ -399,17 +399,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
сгенерированный
поставляемый
@@ -344,17 +344,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
сгенерированный
поставляемый
@@ -409,17 +409,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
сгенерированный
поставляемый
@@ -475,17 +475,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
сгенерированный
поставляемый
@@ -475,17 +475,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
сгенерированный
поставляемый
@@ -369,17 +369,6 @@ func Truncate(path string, length int64) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
11
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
сгенерированный
поставляемый
11
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
сгенерированный
поставляемый
@@ -455,17 +455,6 @@ func Truncate(path string, length int64) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
|
|
||||||
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
|
||||||
fd = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
fd = int(r0)
|
fd = int(r0)
|
||||||
|
|||||||
93
vendor/golang.org/x/sys/unix/ztypes_linux.go
сгенерированный
поставляемый
93
vendor/golang.org/x/sys/unix/ztypes_linux.go
сгенерированный
поставляемый
@@ -24,6 +24,11 @@ type ItimerSpec struct {
|
|||||||
Value Timespec
|
Value Timespec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Itimerval struct {
|
||||||
|
Interval Timeval
|
||||||
|
Value Timeval
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TIME_OK = 0x0
|
TIME_OK = 0x0
|
||||||
TIME_INS = 0x1
|
TIME_INS = 0x1
|
||||||
@@ -4065,3 +4070,91 @@ const (
|
|||||||
NL_POLICY_TYPE_ATTR_MASK = 0xc
|
NL_POLICY_TYPE_ATTR_MASK = 0xc
|
||||||
NL_POLICY_TYPE_ATTR_MAX = 0xc
|
NL_POLICY_TYPE_ATTR_MAX = 0xc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CANBitTiming struct {
|
||||||
|
Bitrate uint32
|
||||||
|
Sample_point uint32
|
||||||
|
Tq uint32
|
||||||
|
Prop_seg uint32
|
||||||
|
Phase_seg1 uint32
|
||||||
|
Phase_seg2 uint32
|
||||||
|
Sjw uint32
|
||||||
|
Brp uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CANBitTimingConst struct {
|
||||||
|
Name [16]uint8
|
||||||
|
Tseg1_min uint32
|
||||||
|
Tseg1_max uint32
|
||||||
|
Tseg2_min uint32
|
||||||
|
Tseg2_max uint32
|
||||||
|
Sjw_max uint32
|
||||||
|
Brp_min uint32
|
||||||
|
Brp_max uint32
|
||||||
|
Brp_inc uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CANClock struct {
|
||||||
|
Freq uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CANBusErrorCounters struct {
|
||||||
|
Txerr uint16
|
||||||
|
Rxerr uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
type CANCtrlMode struct {
|
||||||
|
Mask uint32
|
||||||
|
Flags uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CANDeviceStats struct {
|
||||||
|
Bus_error uint32
|
||||||
|
Error_warning uint32
|
||||||
|
Error_passive uint32
|
||||||
|
Bus_off uint32
|
||||||
|
Arbitration_lost uint32
|
||||||
|
Restarts uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
CAN_STATE_ERROR_ACTIVE = 0x0
|
||||||
|
CAN_STATE_ERROR_WARNING = 0x1
|
||||||
|
CAN_STATE_ERROR_PASSIVE = 0x2
|
||||||
|
CAN_STATE_BUS_OFF = 0x3
|
||||||
|
CAN_STATE_STOPPED = 0x4
|
||||||
|
CAN_STATE_SLEEPING = 0x5
|
||||||
|
CAN_STATE_MAX = 0x6
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
IFLA_CAN_UNSPEC = 0x0
|
||||||
|
IFLA_CAN_BITTIMING = 0x1
|
||||||
|
IFLA_CAN_BITTIMING_CONST = 0x2
|
||||||
|
IFLA_CAN_CLOCK = 0x3
|
||||||
|
IFLA_CAN_STATE = 0x4
|
||||||
|
IFLA_CAN_CTRLMODE = 0x5
|
||||||
|
IFLA_CAN_RESTART_MS = 0x6
|
||||||
|
IFLA_CAN_RESTART = 0x7
|
||||||
|
IFLA_CAN_BERR_COUNTER = 0x8
|
||||||
|
IFLA_CAN_DATA_BITTIMING = 0x9
|
||||||
|
IFLA_CAN_DATA_BITTIMING_CONST = 0xa
|
||||||
|
IFLA_CAN_TERMINATION = 0xb
|
||||||
|
IFLA_CAN_TERMINATION_CONST = 0xc
|
||||||
|
IFLA_CAN_BITRATE_CONST = 0xd
|
||||||
|
IFLA_CAN_DATA_BITRATE_CONST = 0xe
|
||||||
|
IFLA_CAN_BITRATE_MAX = 0xf
|
||||||
|
)
|
||||||
|
|
||||||
|
type KCMAttach struct {
|
||||||
|
Fd int32
|
||||||
|
Bpf_fd int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type KCMUnattach struct {
|
||||||
|
Fd int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type KCMClone struct {
|
||||||
|
Fd int32
|
||||||
|
}
|
||||||
|
|||||||
4
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
сгенерированный
поставляемый
4
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
сгенерированный
поставляемый
@@ -210,8 +210,8 @@ type PtraceFpregs struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PtracePer struct {
|
type PtracePer struct {
|
||||||
_ [0]uint64
|
Control_regs [3]uint64
|
||||||
_ [32]byte
|
_ [8]byte
|
||||||
Starting_addr uint64
|
Starting_addr uint64
|
||||||
Ending_addr uint64
|
Ending_addr uint64
|
||||||
Perc_atmid uint16
|
Perc_atmid uint16
|
||||||
|
|||||||
16
vendor/gopkg.in/ini.v1/key.go
сгенерированный
поставляемый
16
vendor/gopkg.in/ini.v1/key.go
сгенерированный
поставляемый
@@ -110,7 +110,8 @@ func (k *Key) Value() string {
|
|||||||
return k.value
|
return k.value
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValueWithShadows returns raw values of key and its shadows if any.
|
// ValueWithShadows returns raw values of key and its shadows if any. Shadow
|
||||||
|
// keys with empty values are ignored from the returned list.
|
||||||
func (k *Key) ValueWithShadows() []string {
|
func (k *Key) ValueWithShadows() []string {
|
||||||
if len(k.shadows) == 0 {
|
if len(k.shadows) == 0 {
|
||||||
if k.value == "" {
|
if k.value == "" {
|
||||||
@@ -118,10 +119,15 @@ func (k *Key) ValueWithShadows() []string {
|
|||||||
}
|
}
|
||||||
return []string{k.value}
|
return []string{k.value}
|
||||||
}
|
}
|
||||||
vals := make([]string, len(k.shadows)+1)
|
|
||||||
vals[0] = k.value
|
vals := make([]string, 0, len(k.shadows)+1)
|
||||||
for i := range k.shadows {
|
if k.value != "" {
|
||||||
vals[i+1] = k.shadows[i].value
|
vals = append(vals, k.value)
|
||||||
|
}
|
||||||
|
for _, s := range k.shadows {
|
||||||
|
if s.value != "" {
|
||||||
|
vals = append(vals, s.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return vals
|
return vals
|
||||||
}
|
}
|
||||||
|
|||||||
32
vendor/modules.txt
поставляемый
32
vendor/modules.txt
поставляемый
@@ -35,7 +35,7 @@ github.com/armon/go-metrics
|
|||||||
# github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
# github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/avct/uasurfer
|
github.com/avct/uasurfer
|
||||||
# github.com/aws/aws-sdk-go v1.42.49
|
# github.com/aws/aws-sdk-go v1.43.6
|
||||||
## explicit
|
## explicit
|
||||||
github.com/aws/aws-sdk-go/aws
|
github.com/aws/aws-sdk-go/aws
|
||||||
github.com/aws/aws-sdk-go/aws/awserr
|
github.com/aws/aws-sdk-go/aws/awserr
|
||||||
@@ -92,7 +92,7 @@ github.com/bits-and-blooms/bitset
|
|||||||
# github.com/blang/semver v3.5.1+incompatible
|
# github.com/blang/semver v3.5.1+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/blang/semver
|
github.com/blang/semver
|
||||||
# github.com/blevesearch/bleve/v2 v2.3.0
|
# github.com/blevesearch/bleve/v2 v2.3.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/blevesearch/bleve/v2
|
github.com/blevesearch/bleve/v2
|
||||||
github.com/blevesearch/bleve/v2/analysis
|
github.com/blevesearch/bleve/v2/analysis
|
||||||
@@ -148,15 +148,15 @@ github.com/blevesearch/vellum
|
|||||||
github.com/blevesearch/vellum/levenshtein
|
github.com/blevesearch/vellum/levenshtein
|
||||||
github.com/blevesearch/vellum/regexp
|
github.com/blevesearch/vellum/regexp
|
||||||
github.com/blevesearch/vellum/utf8
|
github.com/blevesearch/vellum/utf8
|
||||||
# github.com/blevesearch/zapx/v11 v11.3.2
|
# github.com/blevesearch/zapx/v11 v11.3.3
|
||||||
github.com/blevesearch/zapx/v11
|
github.com/blevesearch/zapx/v11
|
||||||
# github.com/blevesearch/zapx/v12 v12.3.2
|
# github.com/blevesearch/zapx/v12 v12.3.3
|
||||||
github.com/blevesearch/zapx/v12
|
github.com/blevesearch/zapx/v12
|
||||||
# github.com/blevesearch/zapx/v13 v13.3.2
|
# github.com/blevesearch/zapx/v13 v13.3.3
|
||||||
github.com/blevesearch/zapx/v13
|
github.com/blevesearch/zapx/v13
|
||||||
# github.com/blevesearch/zapx/v14 v14.3.2
|
# github.com/blevesearch/zapx/v14 v14.3.3
|
||||||
github.com/blevesearch/zapx/v14
|
github.com/blevesearch/zapx/v14
|
||||||
# github.com/blevesearch/zapx/v15 v15.3.2
|
# github.com/blevesearch/zapx/v15 v15.3.3
|
||||||
github.com/blevesearch/zapx/v15
|
github.com/blevesearch/zapx/v15
|
||||||
# github.com/cespare/xxhash/v2 v2.1.2
|
# github.com/cespare/xxhash/v2 v2.1.2
|
||||||
## explicit
|
## explicit
|
||||||
@@ -256,7 +256,7 @@ github.com/golang/snappy
|
|||||||
github.com/google/btree
|
github.com/google/btree
|
||||||
# github.com/google/uuid v1.3.0
|
# github.com/google/uuid v1.3.0
|
||||||
github.com/google/uuid
|
github.com/google/uuid
|
||||||
# github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd
|
# github.com/gopherjs/gopherjs v0.0.0-20220221023154-0b2280d3ff96
|
||||||
## explicit
|
## explicit
|
||||||
github.com/gopherjs/gopherjs/js
|
github.com/gopherjs/gopherjs/js
|
||||||
# github.com/gorilla/css v1.0.0
|
# github.com/gorilla/css v1.0.0
|
||||||
@@ -270,7 +270,7 @@ github.com/gorilla/mux
|
|||||||
# github.com/gorilla/schema v1.2.0
|
# github.com/gorilla/schema v1.2.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/gorilla/schema
|
github.com/gorilla/schema
|
||||||
# github.com/gorilla/websocket v1.4.2
|
# github.com/gorilla/websocket v1.5.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/gorilla/websocket
|
github.com/gorilla/websocket
|
||||||
# github.com/graph-gophers/graphql-go v1.3.0
|
# github.com/graph-gophers/graphql-go v1.3.0
|
||||||
@@ -344,7 +344,7 @@ github.com/jonboulle/clockwork
|
|||||||
github.com/josharian/intern
|
github.com/josharian/intern
|
||||||
# github.com/json-iterator/go v1.1.12
|
# github.com/json-iterator/go v1.1.12
|
||||||
github.com/json-iterator/go
|
github.com/json-iterator/go
|
||||||
# github.com/klauspost/compress v1.14.2
|
# github.com/klauspost/compress v1.14.4
|
||||||
## explicit
|
## explicit
|
||||||
github.com/klauspost/compress
|
github.com/klauspost/compress
|
||||||
github.com/klauspost/compress/flate
|
github.com/klauspost/compress/flate
|
||||||
@@ -444,7 +444,7 @@ github.com/miekg/dns
|
|||||||
# github.com/minio/md5-simd v1.1.2
|
# github.com/minio/md5-simd v1.1.2
|
||||||
## explicit
|
## explicit
|
||||||
github.com/minio/md5-simd
|
github.com/minio/md5-simd
|
||||||
# github.com/minio/minio-go/v7 v7.0.21
|
# github.com/minio/minio-go/v7 v7.0.23
|
||||||
## explicit
|
## explicit
|
||||||
github.com/minio/minio-go/v7
|
github.com/minio/minio-go/v7
|
||||||
github.com/minio/minio-go/v7/pkg/credentials
|
github.com/minio/minio-go/v7/pkg/credentials
|
||||||
@@ -705,7 +705,7 @@ github.com/xi2/xz
|
|||||||
# github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c
|
# github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c
|
||||||
## explicit
|
## explicit
|
||||||
github.com/xtgo/uuid
|
github.com/xtgo/uuid
|
||||||
# github.com/yuin/goldmark v1.4.5
|
# github.com/yuin/goldmark v1.4.7
|
||||||
## explicit
|
## explicit
|
||||||
github.com/yuin/goldmark
|
github.com/yuin/goldmark
|
||||||
github.com/yuin/goldmark/ast
|
github.com/yuin/goldmark/ast
|
||||||
@@ -722,7 +722,7 @@ go.etcd.io/bbolt
|
|||||||
# go.uber.org/atomic v1.9.0
|
# go.uber.org/atomic v1.9.0
|
||||||
## explicit
|
## explicit
|
||||||
go.uber.org/atomic
|
go.uber.org/atomic
|
||||||
# golang.org/x/crypto v0.0.0-20220208233918-bba287dce954
|
# golang.org/x/crypto v0.0.0-20220214200702-86341886e292
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/crypto/acme
|
golang.org/x/crypto/acme
|
||||||
golang.org/x/crypto/acme/autocert
|
golang.org/x/crypto/acme/autocert
|
||||||
@@ -772,7 +772,7 @@ golang.org/x/net/trace
|
|||||||
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
# golang.org/x/sys v0.0.0-20220207234003-57398862261d
|
# golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sys/cpu
|
golang.org/x/sys/cpu
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
@@ -823,7 +823,7 @@ golang.org/x/tools/internal/typesinternal
|
|||||||
# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
|
# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
|
||||||
golang.org/x/xerrors
|
golang.org/x/xerrors
|
||||||
golang.org/x/xerrors/internal
|
golang.org/x/xerrors/internal
|
||||||
# google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068
|
# google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf
|
||||||
## explicit
|
## explicit
|
||||||
google.golang.org/genproto/googleapis/rpc/status
|
google.golang.org/genproto/googleapis/rpc/status
|
||||||
# google.golang.org/grpc v1.44.0
|
# google.golang.org/grpc v1.44.0
|
||||||
@@ -911,7 +911,7 @@ google.golang.org/protobuf/types/known/timestamppb
|
|||||||
# gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
|
# gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3
|
gopkg.in/alexcesaro/quotedprintable.v3
|
||||||
# gopkg.in/ini.v1 v1.66.3
|
# gopkg.in/ini.v1 v1.66.4
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/ini.v1
|
gopkg.in/ini.v1
|
||||||
# gopkg.in/mail.v2 v2.3.1
|
# gopkg.in/mail.v2 v2.3.1
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user