From e80f9bda7f6b4400ecc0153eb81c66dcff5ba16c Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Fri, 17 Aug 2018 08:22:29 +0100 Subject: [PATCH] Use the replds client instead of going through clientutil --- manager.go | 6 +- storage.go | 7 +- .../ai3/go-common/clientutil/backend.go | 111 +- .../ai3/go-common/clientutil/balancer.go | 271 ++ .../ai3/go-common/clientutil/cpu.prof | Bin 0 -> 4566 bytes .../ai3/go-common/clientutil/dns.go | 98 + .../ai3/go-common/clientutil/doc.go | 37 + .../ai3/go-common/clientutil/error.go | 35 + .../ai3/go-common/clientutil/json.go | 45 - .../ai3/go-common/clientutil/retry.go | 92 - .../ai3/go-common/clientutil/track.go | 123 + .../ai3/go-common/clientutil/transport.go | 175 +- vendor/git.autistici.org/ai3/go-common/pwtool | Bin 2316456 -> 0 bytes vendor/git.autistici.org/ai3/replds/client.go | 6 +- vendor/git.autistici.org/ai3/replds/server.go | 2 +- vendor/github.com/cenkalti/backoff/README.md | 2 +- vendor/github.com/cenkalti/backoff/context.go | 3 +- vendor/github.com/cenkalti/backoff/retry.go | 1 - vendor/github.com/cenkalti/backoff/ticker.go | 2 - vendor/github.com/cenkalti/backoff/tries.go | 4 +- .../github.com/golang/protobuf/proto/Makefile | 43 + .../github.com/golang/protobuf/proto/clone.go | 46 +- .../golang/protobuf/proto/decode.go | 668 +++- .../golang/protobuf/proto/discard.go | 350 --- .../golang/protobuf/proto/encode.go | 1191 +++++++- .../github.com/golang/protobuf/proto/equal.go | 30 +- .../golang/protobuf/proto/extensions.go | 204 +- .../github.com/golang/protobuf/proto/lib.go | 70 +- .../golang/protobuf/proto/message_set.go | 81 +- .../golang/protobuf/proto/pointer_reflect.go | 595 ++-- .../golang/protobuf/proto/pointer_unsafe.go | 366 +-- .../golang/protobuf/proto/properties.go | 424 ++- .../golang/protobuf/proto/table_marshal.go | 2681 ----------------- .../golang/protobuf/proto/table_merge.go | 654 ---- .../golang/protobuf/proto/table_unmarshal.go | 1967 ------------ .../github.com/golang/protobuf/proto/text.go | 61 +- .../golang/protobuf/proto/text_parser.go | 77 +- vendor/github.com/miekg/dns/AUTHORS | 1 + vendor/github.com/miekg/dns/CONTRIBUTORS | 9 + vendor/github.com/miekg/dns/COPYRIGHT | 9 + vendor/github.com/miekg/dns/LICENSE | 32 + vendor/github.com/miekg/dns/README.md | 149 + vendor/github.com/miekg/dns/client.go | 378 +++ vendor/github.com/miekg/dns/clientconfig.go | 99 + vendor/github.com/miekg/dns/defaults.go | 278 ++ vendor/github.com/miekg/dns/dns.go | 100 + vendor/github.com/miekg/dns/dnssec.go | 659 ++++ vendor/github.com/miekg/dns/dnssec_keygen.go | 156 + vendor/github.com/miekg/dns/dnssec_keyscan.go | 249 ++ vendor/github.com/miekg/dns/dnssec_privkey.go | 85 + vendor/github.com/miekg/dns/doc.go | 251 ++ vendor/github.com/miekg/dns/edns.go | 514 ++++ vendor/github.com/miekg/dns/format.go | 96 + vendor/github.com/miekg/dns/labels.go | 162 + vendor/github.com/miekg/dns/msg.go | 2030 +++++++++++++ vendor/github.com/miekg/dns/nsecx.go | 112 + vendor/github.com/miekg/dns/privaterr.go | 117 + vendor/github.com/miekg/dns/rawmsg.go | 95 + vendor/github.com/miekg/dns/sanitize.go | 84 + vendor/github.com/miekg/dns/scanner.go | 43 + vendor/github.com/miekg/dns/server.go | 717 +++++ vendor/github.com/miekg/dns/sig0.go | 216 ++ vendor/github.com/miekg/dns/singleinflight.go | 57 + vendor/github.com/miekg/dns/tlsa.go | 86 + vendor/github.com/miekg/dns/tsig.go | 333 ++ vendor/github.com/miekg/dns/types.go | 1741 +++++++++++ vendor/github.com/miekg/dns/udp.go | 58 + vendor/github.com/miekg/dns/udp_linux.go | 63 + vendor/github.com/miekg/dns/udp_other.go | 17 + vendor/github.com/miekg/dns/udp_windows.go | 34 + vendor/github.com/miekg/dns/update.go | 94 + vendor/github.com/miekg/dns/xfr.go | 244 ++ vendor/github.com/miekg/dns/zgenerate.go | 158 + vendor/github.com/miekg/dns/zscan.go | 972 ++++++ vendor/github.com/miekg/dns/zscan_rr.go | 2270 ++++++++++++++ .../prometheus/common/model/time.go | 3 + vendor/golang.org/x/crypto/acme/acme.go | 420 +-- vendor/golang.org/x/crypto/acme/http.go | 281 ++ vendor/golang.org/x/crypto/acme/types.go | 8 +- vendor/gopkg.in/yaml.v2/LICENSE | 208 +- vendor/vendor.json | 86 +- 81 files changed, 16883 insertions(+), 7419 deletions(-) create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/dns.go create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/doc.go create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/error.go delete mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/json.go delete mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/retry.go create mode 100644 vendor/git.autistici.org/ai3/go-common/clientutil/track.go delete mode 100755 vendor/git.autistici.org/ai3/go-common/pwtool create mode 100644 vendor/github.com/golang/protobuf/proto/Makefile delete mode 100644 vendor/github.com/golang/protobuf/proto/discard.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_marshal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_merge.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_unmarshal.go create mode 100644 vendor/github.com/miekg/dns/AUTHORS create mode 100644 vendor/github.com/miekg/dns/CONTRIBUTORS create mode 100644 vendor/github.com/miekg/dns/COPYRIGHT create mode 100644 vendor/github.com/miekg/dns/LICENSE create mode 100644 vendor/github.com/miekg/dns/README.md create mode 100644 vendor/github.com/miekg/dns/client.go create mode 100644 vendor/github.com/miekg/dns/clientconfig.go create mode 100644 vendor/github.com/miekg/dns/defaults.go create mode 100644 vendor/github.com/miekg/dns/dns.go create mode 100644 vendor/github.com/miekg/dns/dnssec.go create mode 100644 vendor/github.com/miekg/dns/dnssec_keygen.go create mode 100644 vendor/github.com/miekg/dns/dnssec_keyscan.go create mode 100644 vendor/github.com/miekg/dns/dnssec_privkey.go create mode 100644 vendor/github.com/miekg/dns/doc.go create mode 100644 vendor/github.com/miekg/dns/edns.go create mode 100644 vendor/github.com/miekg/dns/format.go create mode 100644 vendor/github.com/miekg/dns/labels.go create mode 100644 vendor/github.com/miekg/dns/msg.go create mode 100644 vendor/github.com/miekg/dns/nsecx.go create mode 100644 vendor/github.com/miekg/dns/privaterr.go create mode 100644 vendor/github.com/miekg/dns/rawmsg.go create mode 100644 vendor/github.com/miekg/dns/sanitize.go create mode 100644 vendor/github.com/miekg/dns/scanner.go create mode 100644 vendor/github.com/miekg/dns/server.go create mode 100644 vendor/github.com/miekg/dns/sig0.go create mode 100644 vendor/github.com/miekg/dns/singleinflight.go create mode 100644 vendor/github.com/miekg/dns/tlsa.go create mode 100644 vendor/github.com/miekg/dns/tsig.go create mode 100644 vendor/github.com/miekg/dns/types.go create mode 100644 vendor/github.com/miekg/dns/udp.go create mode 100644 vendor/github.com/miekg/dns/udp_linux.go create mode 100644 vendor/github.com/miekg/dns/udp_other.go create mode 100644 vendor/github.com/miekg/dns/udp_windows.go create mode 100644 vendor/github.com/miekg/dns/update.go create mode 100644 vendor/github.com/miekg/dns/xfr.go create mode 100644 vendor/github.com/miekg/dns/zgenerate.go create mode 100644 vendor/github.com/miekg/dns/zscan.go create mode 100644 vendor/github.com/miekg/dns/zscan_rr.go create mode 100644 vendor/golang.org/x/crypto/acme/http.go diff --git a/manager.go b/manager.go index 76910d1..a2f099e 100644 --- a/manager.go +++ b/manager.go @@ -17,7 +17,7 @@ import ( "sync" "time" - "git.autistici.org/ai3/go-common/clientutil" + "git.autistici.org/ai3/replds" "github.com/prometheus/client_golang/prometheus" ) @@ -109,13 +109,13 @@ func NewManager(config *Config, certGen CertGenerator) (*Manager, error) { if config.ReplDS == nil { m.storage = ds } else { - be, err := clientutil.NewBackend(config.ReplDS) + r, err := replds.NewPublicClient(config.ReplDS) if err != nil { return nil, err } m.storage = &replStorage{ dirStorage: ds, - replClient: be, + replClient: r, } } diff --git a/storage.go b/storage.go index b94d654..9641fe6 100644 --- a/storage.go +++ b/storage.go @@ -16,7 +16,6 @@ import ( "strings" "time" - "git.autistici.org/ai3/go-common/clientutil" "git.autistici.org/ai3/replds" ) @@ -93,7 +92,7 @@ func dumpCertsAndKey(cn string, der [][]byte, key crypto.Signer) (map[string][]b // certificates to replds instead. type replStorage struct { *dirStorage - replClient clientutil.Backend + replClient replds.PublicClient } func (d *replStorage) PutCert(cn string, der [][]byte, key crypto.Signer) error { @@ -115,8 +114,8 @@ func (d *replStorage) PutCert(cn string, der [][]byte, key crypto.Signer) error ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() - var resp replds.SetNodesResponse - if err := clientutil.DoJSONHTTPRequest(ctx, d.replClient.Client(""), d.replClient.URL("")+"/api/set_nodes", req, &resp); err != nil { + resp, err := d.replClient.SetNodes(ctx, &req) + if err != nil { return err } if resp.HostsOk < 1 { diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/backend.go b/vendor/git.autistici.org/ai3/go-common/clientutil/backend.go index 1f49a7e..6580d0e 100644 --- a/vendor/git.autistici.org/ai3/go-common/clientutil/backend.go +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/backend.go @@ -1,15 +1,10 @@ package clientutil import ( - "crypto/tls" - "fmt" - "net/http" - "net/url" - "sync" - "time" + "context" ) -// BackendConfig specifies the configuration to access a service. +// BackendConfig specifies the configuration of a service backend. // // Services with multiple backends can be replicated or partitioned, // depending on a configuration switch, making it a deployment-time @@ -18,102 +13,30 @@ import ( // 'shard' parameter on their APIs. type BackendConfig struct { URL string `yaml:"url"` - Sharded bool `yaml:"sharded"` TLSConfig *TLSClientConfig `yaml:"tls_config"` + Sharded bool `yaml:"sharded"` + Debug bool `yaml:"debug"` } // Backend is a runtime class that provides http Clients for use with // a specific service backend. If the service can't be partitioned, -// pass an empty string to the Client method. +// pass an empty string to the Call method. type Backend interface { - // URL for the service for a specific shard. - URL(string) string + // Call a remote method. The sharding behavior is the following: + // + // Services that support sharding (partitioning) should always + // include the shard ID in their Call() requests. Users can + // then configure backends to be sharded or not in their + // Config. When invoking Call with a shard ID on a non-sharded + // service, the shard ID is simply ignored. Invoking Call + // *without* a shard ID on a sharded service is an error. + Call(context.Context, string, string, interface{}, interface{}) error - // Client that can be used to make a request to the service. - Client(string) *http.Client + // Close all resources associated with the backend. + Close() } // NewBackend returns a new Backend with the given config. func NewBackend(config *BackendConfig) (Backend, error) { - u, err := url.Parse(config.URL) - if err != nil { - return nil, err - } - - var tlsConfig *tls.Config - if config.TLSConfig != nil { - tlsConfig, err = config.TLSConfig.TLSConfig() - if err != nil { - return nil, err - } - } - - if config.Sharded { - return &replicatedClient{ - u: u, - c: newHTTPClient(u, tlsConfig), - }, nil - } - return &shardedClient{ - baseURL: u, - tlsConfig: tlsConfig, - urls: make(map[string]*url.URL), - shards: make(map[string]*http.Client), - }, nil -} - -type replicatedClient struct { - c *http.Client - u *url.URL -} - -func (r *replicatedClient) Client(_ string) *http.Client { return r.c } -func (r *replicatedClient) URL(_ string) string { return r.u.String() } - -type shardedClient struct { - baseURL *url.URL - tlsConfig *tls.Config - mx sync.Mutex - urls map[string]*url.URL - shards map[string]*http.Client -} - -func (s *shardedClient) getShardURL(shard string) *url.URL { - if shard == "" { - return s.baseURL - } - u, ok := s.urls[shard] - if !ok { - var tmp = *s.baseURL - tmp.Host = fmt.Sprintf("%s.%s", shard, tmp.Host) - u = &tmp - s.urls[shard] = u - } - return u -} - -func (s *shardedClient) URL(shard string) string { - s.mx.Lock() - defer s.mx.Unlock() - return s.getShardURL(shard).String() -} - -func (s *shardedClient) Client(shard string) *http.Client { - s.mx.Lock() - defer s.mx.Unlock() - - client, ok := s.shards[shard] - if !ok { - u := s.getShardURL(shard) - client = newHTTPClient(u, s.tlsConfig) - s.shards[shard] = client - } - return client -} - -func newHTTPClient(u *url.URL, tlsConfig *tls.Config) *http.Client { - return &http.Client{ - Transport: NewTransport([]string{u.Host}, tlsConfig, nil), - Timeout: 30 * time.Second, - } + return newBalancedBackend(config, defaultResolver) } diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go b/vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go new file mode 100644 index 0000000..9d9b7dd --- /dev/null +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go @@ -0,0 +1,271 @@ +package clientutil + +import ( + "bytes" + "context" + "crypto/tls" + "encoding/json" + "errors" + "fmt" + "log" + "math/rand" + "net/http" + "net/url" + "os" + "strconv" + "strings" + "time" + + "github.com/cenkalti/backoff" +) + +// Our own narrow logger interface. +type logger interface { + Printf(string, ...interface{}) +} + +// A nilLogger is used when Config.Debug is false. +type nilLogger struct{} + +func (l nilLogger) Printf(_ string, _ ...interface{}) {} + +// Parameters that define the exponential backoff algorithm used. +var ( + ExponentialBackOffInitialInterval = 100 * time.Millisecond + ExponentialBackOffMultiplier = 1.4142 +) + +// newExponentialBackOff creates a backoff.ExponentialBackOff object +// with our own default values. +func newExponentialBackOff() *backoff.ExponentialBackOff { + b := backoff.NewExponentialBackOff() + b.InitialInterval = ExponentialBackOffInitialInterval + b.Multiplier = ExponentialBackOffMultiplier + + // Set MaxElapsedTime to 0 because we expect the overall + // timeout to be dictated by the request Context. + b.MaxElapsedTime = 0 + + return b +} + +// Balancer for HTTP connections. It will round-robin across available +// backends, trying to avoid ones that are erroring out, until one +// succeeds or returns a permanent error. +// +// This object should not be used for load balancing of individual +// HTTP requests: it doesn't do anything smart beyond trying to avoid +// broken targets. It's meant to provide a *reliable* connection to a +// set of equivalent services for HA purposes. +type balancedBackend struct { + *backendTracker + *transportCache + baseURI *url.URL + sharded bool + resolver resolver + log logger +} + +func newBalancedBackend(config *BackendConfig, resolver resolver) (*balancedBackend, error) { + u, err := url.Parse(config.URL) + if err != nil { + return nil, err + } + + var tlsConfig *tls.Config + if config.TLSConfig != nil { + tlsConfig, err = config.TLSConfig.TLSConfig() + if err != nil { + return nil, err + } + } + + var logger logger = &nilLogger{} + if config.Debug { + logger = log.New(os.Stderr, fmt.Sprintf("backend %s: ", u.Host), 0) + } + return &balancedBackend{ + backendTracker: newBackendTracker(u.Host, resolver, logger), + transportCache: newTransportCache(tlsConfig), + sharded: config.Sharded, + baseURI: u, + resolver: resolver, + log: logger, + }, nil +} + +// Call the backend. Makes an HTTP POST request to the specified uri, +// with a JSON-encoded request body. It will attempt to decode the +// response body as JSON. +func (b *balancedBackend) Call(ctx context.Context, shard, path string, req, resp interface{}) error { + data, err := json.Marshal(req) + if err != nil { + return err + } + + var tg targetGenerator = b.backendTracker + if b.sharded && shard != "" { + tg = newShardedGenerator(shard, b.baseURI.Host, b.resolver) + } + seq := newSequence(tg) + b.log.Printf("%016x: initialized", seq.ID()) + + var httpResp *http.Response + err = backoff.Retry(func() error { + req, rerr := b.newJSONRequest(path, shard, data) + if rerr != nil { + return rerr + } + httpResp, rerr = b.do(ctx, seq, req) + return rerr + }, backoff.WithContext(newExponentialBackOff(), ctx)) + if err != nil { + return err + } + defer httpResp.Body.Close() // nolint + + if httpResp.Header.Get("Content-Type") != "application/json" { + return errors.New("not a JSON response") + } + + if resp == nil { + return nil + } + return json.NewDecoder(httpResp.Body).Decode(resp) +} + +// Return the URI to be used for the request. This is used both in the +// Host HTTP header and as the TLS server name used to pick a server +// certificate (if using TLS). +func (b *balancedBackend) getURIForRequest(shard, path string) string { + u := *b.baseURI + if b.sharded && shard != "" { + u.Host = fmt.Sprintf("%s.%s", shard, u.Host) + } + u.Path = appendPath(u.Path, path) + return u.String() +} + +// Build a http.Request object. +func (b *balancedBackend) newJSONRequest(path, shard string, data []byte) (*http.Request, error) { + req, err := http.NewRequest("POST", b.getURIForRequest(shard, path), bytes.NewReader(data)) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Content-Length", strconv.FormatInt(int64(len(data)), 10)) + return req, nil +} + +// Select a new target from the given sequence and send the request to +// it. Wrap HTTP errors in a RemoteError object. +func (b *balancedBackend) do(ctx context.Context, seq *sequence, req *http.Request) (resp *http.Response, err error) { + target, terr := seq.Next() + if terr != nil { + return + } + + b.log.Printf("sequence %016x: connecting to %s", seq.ID(), target) + client := &http.Client{ + Transport: b.transportCache.getTransport(target), + } + resp, err = client.Do(req.WithContext(ctx)) + if err == nil && resp.StatusCode != 200 { + err = remoteErrorFromResponse(resp) + if !isStatusTemporary(resp.StatusCode) { + err = backoff.Permanent(err) + } + resp.Body.Close() // nolint + resp = nil + } + + seq.Done(target, err) + return +} + +var errNoTargets = errors.New("no available backends") + +type targetGenerator interface { + getTargets() []string + setStatus(string, bool) +} + +// A replicatedSequence repeatedly iterates over available backends in order of +// preference. Once in a while it refreshes its list of available +// targets. +type sequence struct { + id uint64 + tg targetGenerator + targets []string + pos int +} + +func newSequence(tg targetGenerator) *sequence { + return &sequence{ + id: rand.Uint64(), + tg: tg, + targets: tg.getTargets(), + } +} + +func (s *sequence) ID() uint64 { return s.id } + +func (s *sequence) reloadTargets() { + targets := s.tg.getTargets() + if len(targets) > 0 { + s.targets = targets + s.pos = 0 + } +} + +// Next returns the next target. +func (s *sequence) Next() (t string, err error) { + if s.pos >= len(s.targets) { + s.reloadTargets() + if len(s.targets) == 0 { + err = errNoTargets + return + } + } + t = s.targets[s.pos] + s.pos++ + return +} + +func (s *sequence) Done(t string, err error) { + s.tg.setStatus(t, err == nil) +} + +// A shardedGenerator returns a single sharded target to a sequence. +type shardedGenerator struct { + id uint64 + addrs []string +} + +func newShardedGenerator(shard, base string, resolver resolver) *shardedGenerator { + return &shardedGenerator{ + id: rand.Uint64(), + addrs: resolver.ResolveIP(fmt.Sprintf("%s.%s", shard, base)), + } +} + +func (g *shardedGenerator) getTargets() []string { return g.addrs } +func (g *shardedGenerator) setStatus(_ string, _ bool) {} + +// Concatenate two URI paths. +func appendPath(a, b string) string { + if strings.HasSuffix(a, "/") && strings.HasPrefix(b, "/") { + return a + b[1:] + } + return a + b +} + +// Some HTTP status codes are treated are temporary errors. +func isStatusTemporary(code int) bool { + switch code { + case http.StatusTooManyRequests, http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout: + return true + default: + return false + } +} diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof b/vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof new file mode 100644 index 0000000000000000000000000000000000000000..89fe0a7d104f6c1ca9466d218abbfe393d431402 GIT binary patch literal 4566 zcmV;{5h?B;iwFP!00004|D<>cbQIT>_Fo{uqXqOufVhaQD7J2ax~0;F*g@=;kt_+Y zu|ZT<zit((u4-3RV{kS(h8Wp~7;hLbiw)TMC*wFL@s=4Uu``}*lbpm!JdW)wPV9Jc zW|$<-IICkb=f0{|OLmJHk2$BQ?)Sa#zPrC$svOTG=<Dknfql<h7#Wc&E7%C=JNw+p z{x@e~-`U6R?|*YvWJJx#$_h3T`d)qFR6ni1`ZPTwB{ij$6|4mM`o3~n?0@DP^o)$E z8C^Mvl|tXyx4!Z1OS7==Rq>3l%1SnhPJ8<j{gbfoZ2oIx%*OBi{DE8Uz4*$7$)OS! zg0fHv8w=yw&)$98%QJU~@4NdR`DKX$Ou{cca`y<Olu7Ul38X5<Bp8q5<*)*51U~V~ zQNl*RrBMPK0e~P+P=JlZ-@bN~u#s?%32Y>kW4XXe@DH!tOIQh<87Z(5n1~bQN#)}} z0y;QUB8?bXqJ&u~p8xvE5lRUwg=u1EDNM%6a)knH6kh!7Ns=-O9vUmKQ7{Fk$fy7t zjnDt)1Yx7$4PWcgFcqiDl}eZ~{L#BVCy@-+3mSuII8C0e02_n9{_5*Q8v{pt+8CID zGvt{{n1%31PrOdF5bPAR5X{0^@=OI-8UFb@za&~29QJ8tAfqhLR>Ev79y<9eqK$<W zf;JWuROC5In2p1`jtgiUED_K+n2U4eISR1x`25#?N)pGzxe|emhj}<pp05B4;~Sq9 zSQu{hu`n#a1p)*7@?n7i9QHj65W$GRCg6cfKOvbD;F%FZ<^+ghRAA-!_&WkChcEb8 zIaFblJYNa3iTKwS&W}_|*hI(*+C*503*|)$ut|9O)(az*QZ@;`?i)S{s<B#*DZnP< zgD>At*kpLiPmakD$GBXh0IR@XeEt++6>#29jtZ#7T7gZ$V{e=xYzjO&TAVipR8-}f z^65|leUJ4|3{5N@HJXhHm5m)YJ`5AeCr+ANF+~A}c<$w6WFW$mzVQfkSSQyjVKx;X zc>Y!j!&ImiLZ?ClHpq<%uu42}_5jf;;h1kkB{X4^yjTG?4PSrhcEYB?9peOV8Z=|G zyhH&u9iM$iVAJ765ZH8Bic1AH1K+;$F!5%<_a+Ez1}wv60-K5V92eM3I8rXKnXnv} z3v3picu7>oEI94QVHT{w74oF=2`~csUVd&&h~d=AY13!SoTUJh@vqMa)n$03REUyc zC9afLDPcAnzjf$NvUoP^63}c|jjQD~N(EE!*5AENkOIq<QZ@(P_Q?vgV2ixAim^Gc z4%f-+6<~AlH*cM$aLk2+ezwhp4Y)zxr~sRb55Lt<*gSa6$L7H%+$3*Q!fYO%x?g0? zd~n6_^I<b?mSako&BqIeE>J=(faL;O09W7@0$P9%fBqan5tt{S2()6We5Dd*5&YBV z1Qdm-0*b;G+#;YTK7UZ0RRxO$R0VC=CbF;!kG^@HR9pyW{opQyc5IigQh+VQ-`y;- zcM-hgV~d~zI|Q}}&piD&1+W_a-FHqkbYiF6RbG*AQRC#<%AC3L<}Zjus}@o<RO6Qp zi@?U<fFJZ2Y{ji2urYk_CV@?d?*d2)usFW(uvm%18-5zZVH<9fmz0mspHNyIn-Qlt z*WmGkqSe*FeSTWhz;@g&qY`Gd_|lQH6wF#!DU7d$tMO|28U>h&UwrEf8KJ@teFIh4 zfji`Dl`yNr&)gwsb<iPbb#NVCCusF}-?3MTRu514w0hWyJ4J_V!2kH{YlJnxH+`%D zcHu6$TLIRH4_vyBeBB67_zk%ccH?eYQ-C$$i!X|*Zh{MbAvHk)69QX|U%c-)@fO2f z<ApAZK}TKI$|vSM5h|^zRqN^-8k?vpoAL99j*$}0aNf_mW=LXEo}>U<f}i?YP!fMB z6^>qt|Mq>cvIM^AH=-rLk;|(TV9W4S-!VFRDIE8k%~D8VN=_@lmg7I(Bg|O_7kq3P z^k9!rc?Ev?jzHyq83$5%IIrla<|Rv)EnlI8*-HHG8IiBcgYLc@3^e3DN|>#}KjyQ% zTBx`hzxuAo(iQL>->WO27klNa${{a!^vYF{Xw~XPN|>#|dw&r0vK4~ff{&gP7OsS6 zefml;(G(qQEgrleuvPG5A6o?(%m{29{^aBl^5beaKT|k<HCSkggk6t6{Rh$A*1+j8 z0$T$%+5+2vUwlenEzsv<Es({mykwBNxTa<8y7e0rU>os;zaFGh*1|)6TV4y-<Mpzm zgxMzi{oll0ybkKcA?v_JS7h2|y!433!u4>;SA0Eq=n3o!eCNSmk;n~j$j3H74s+t_ zY{eh{m$<_>!k>I>BkaY!@(l{GEAi-GMA$aLEtAE0n_wUA6CvG#7vDHXsjxX;W1C?= z?w4;IWYoq@o3CiSa*G124WBzAD)I_A=-*&hz(?>SV)$ss&s-G4M=Lz;YtRZG#gEFB z3b3p2E9cIV=2yZiK6WL13_m97t^=QaKv=v5e&S<W;N$plVR0w^{llW}+Tdv)YlBbV zCq&(K;hRsMBF)?33lxqJYll7w`y_FnZpHun^;hV`tKdm0mNIq~+$7;mlKe?(L))<b zxajX4@LMX(5bJ=OCA?XZYs$;>$v397t^KNw&aSQ7lrY<l&wl?HHJnaJfK(M?op3<H z1Cm^?0J|EWJQ1W+|4fhu4RqVD7TItOK7RZJDcc1{sgH+P7aWxEpd^B@1AqBvQFB}2 zVwn)W6+R{5r+oBUy!{>#zQu54JV=AvgV67qtvjf-U58Kg2iHOC5EZVY`kBmj;vau@ zGa0ZArYR+CJ1hdJs*G)eTO_<ik`K|3?a(h_KmAaE?ZV&RDQf6yIOMzVYPeOxTLZWo zzxM7U<l$@J+dg~^+$P~|l6*U{cjJLSe2(B9@Hky1Wo!o=mhf-@Yk2fr0RPh{QO*hc zQNLKZ7XHpBTnk4eJQ5Ie{8Im;B=0(So%&K4yAD1r;im&QiT`|;&}Jt*N10N_cETMJ z-VwkYAAIvB^8YS)n68pCwhN9*cvO<_l$0<_;ek&EzH0z!&}FxCSNCo$p(lBYoH&K0 z@$pARLUzN$l2Xcc`&Ueeb;Df}-X+Q1RUx(;?w0UwNn~jc{`i(4c=uDwEDMs0rCE;x z%)p;LBl1v#qcly0m<IPqc#ogNd+_In1e$>3ewHTSUJ38@(O&%F0fFjp3tc=Rro%A_ zk5LX!42~JNLX17VN|>4Wx5xS@2a*sM(NDsC65c1t$0=kPeDPK>yK;Z%2{8^QBs}3C zXW?%jyNz6!f*1S%q~N54CnfoQBHMWIApxi1|NC$nPDywwfV23}4^9%h2VSH2gjf%p zmhiMBs`YyO))yWi)PR4b@PwEFXCypBXqY+p&Qr%p>pelv?t!xso|WVW=wKIrcvxuN z3x_EWL#!7bl<+~~0`u@sFN*$V`qNH`nQ%_RbCP_c0xXA5Ulcb`25$GY%D{OE&r4z& z+KVsc?<X20$|vWYI@ZiscJ_M5^>TX`ssB%Hi}%<W9@k7BcO5;Rw*80U#k8DfxSpXK zG22PUHKQ(`wySkJld-M1ZW`S3a-Lxh`Wo}N>#0iIG!pTBiyONe>#I$}%I&L8TRB?P ztJRoV7jtbjl4z(~T&vYLG&R>WCe^0qnx?wNs;V{UJfYU>^@$WuHP<JT2{l5*qSCTn zkHfWOL8i`Yn|O^{*HEvjjSVTiwl>+E&=;o~>gp4T`czF*O?`7+vaUvz<Ha=`B	W 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/dns.go b/vendor/git.autistici.org/ai3/go-common/clientutil/dns.go new file mode 100644 index 0000000..ed30f87 --- /dev/null +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/dns.go @@ -0,0 +1,98 @@ +package clientutil + +import ( + "log" + "net" + "sync" + "time" + + "golang.org/x/sync/singleflight" +) + +type resolver interface { + ResolveIP(string) []string +} + +type dnsResolver struct{} + +func (r *dnsResolver) ResolveIP(hostport string) []string { + var resolved []string + host, port, err := net.SplitHostPort(hostport) + if err != nil { + log.Printf("error parsing %s: %v", hostport, err) + return nil + } + hostIPs, err := net.LookupIP(host) + if err != nil { + log.Printf("error resolving %s: %v", host, err) + return nil + } + for _, ip := range hostIPs { + resolved = append(resolved, net.JoinHostPort(ip.String(), port)) + } + return resolved +} + +var defaultResolver = newDNSCache(&dnsResolver{}) + +type cacheDatum struct { + addrs []string + deadline time.Time +} + +type dnsCache struct { + resolver resolver + sf singleflight.Group + mx sync.RWMutex + cache map[string]cacheDatum +} + +func newDNSCache(resolver resolver) *dnsCache { + return &dnsCache{ + resolver: resolver, + cache: make(map[string]cacheDatum), + } +} + +func (c *dnsCache) get(host string) ([]string, bool) { + d, ok := c.cache[host] + if !ok { + return nil, false + } + return d.addrs, d.deadline.After(time.Now()) +} + +func (c *dnsCache) update(host string) []string { + v, _, _ := c.sf.Do(host, func() (interface{}, error) { + addrs := c.resolver.ResolveIP(host) + // By uncommenting this, we stop caching negative results. + // if len(addrs) == 0 { + // return nil, nil + // } + c.mx.Lock() + c.cache[host] = cacheDatum{ + addrs: addrs, + deadline: time.Now().Add(60 * time.Second), + } + c.mx.Unlock() + return addrs, nil + }) + return v.([]string) +} + +func (c *dnsCache) ResolveIP(host string) []string { + c.mx.RLock() + addrs, ok := c.get(host) + c.mx.RUnlock() + + if ok { + return addrs + } + + if len(addrs) > 0 { + go c.update(host) + return addrs + } + + return c.update(host) +} diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/doc.go b/vendor/git.autistici.org/ai3/go-common/clientutil/doc.go new file mode 100644 index 0000000..421915b --- /dev/null +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/doc.go @@ -0,0 +1,37 @@ +// Package clientutil implements a very simple style of JSON RPC. +// +// Requests and responses are both encoded in JSON, and they should +// have the "application/json" Content-Type. +// +// HTTP response statuses other than 200 indicate an error: in this +// case, the response body may contain (in plain text) further details +// about the error. Some HTTP status codes are considered temporary +// errors (incl. 429 for throttling). The client will retry requests, +// if targets are available, until the context expires - so it's quite +// important to remember to set a timeout on the context given to the +// Call() function! +// +// The client handles both replicated services and sharded +// (partitioned) services. Users of this package that want to support +// sharded deployments are supposed to pass a shard ID to every +// Call(). At the deployment stage, sharding can be enabled via the +// configuration. +// +// For replicated services, the client will expect the provided +// hostname to resolve to one or more IP addresses, in which case it +// will pick a random IP address on every new request, while +// remembering which addresses have had errors and trying to avoid +// them. It will however send an occasional request to the failed +// targets, to see if they've come back. +// +// For sharded services, the client makes simple HTTP requests to the +// specific target identified by the shard. It does this by prepending +// the shard ID to the backend hostname (so a request to "example.com" +// with shard ID "1" becomes a request to "1.example.com"). +// +// The difference with other JSON-RPC implementations is that we use a +// different URI for every method, and we force the usage of +// request/response types. This makes it easy for projects to +// eventually migrate to GRPC. +// +package clientutil diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/error.go b/vendor/git.autistici.org/ai3/go-common/clientutil/error.go new file mode 100644 index 0000000..f011e16 --- /dev/null +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/error.go @@ -0,0 +1,35 @@ +package clientutil + +import ( + "fmt" + "io/ioutil" + "net/http" +) + +// RemoteError represents a HTTP error from the server. The status +// code and response body can be retrieved with the StatusCode() and +// Body() methods. +type RemoteError struct { + statusCode int + body string +} + +func remoteErrorFromResponse(resp *http.Response) *RemoteError { + // Optimistically read the response body, ignoring errors. + var body string + if data, err := ioutil.ReadAll(resp.Body); err == nil { + body = string(data) + } + return &RemoteError{statusCode: resp.StatusCode, body: body} +} + +// Error implements the error interface. +func (e *RemoteError) Error() string { + return fmt.Sprintf("%d - %s", e.statusCode, e.body) +} + +// StatusCode returns the HTTP status code. +func (e *RemoteError) StatusCode() int { return e.statusCode } + +// Body returns the response body. +func (e *RemoteError) Body() string { return e.body } diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/json.go b/vendor/git.autistici.org/ai3/go-common/clientutil/json.go deleted file mode 100644 index 5fc1ab2..0000000 --- a/vendor/git.autistici.org/ai3/go-common/clientutil/json.go +++ /dev/null @@ -1,45 +0,0 @@ -package clientutil - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "net/http" -) - -// DoJSONHTTPRequest makes an HTTP POST request to the specified uri, -// with a JSON-encoded request body. It will attempt to decode the -// response body as JSON. -func DoJSONHTTPRequest(ctx context.Context, client *http.Client, uri string, req, resp interface{}) error { - data, err := json.Marshal(req) - if err != nil { - return err - } - - httpReq, err := http.NewRequest("POST", uri, bytes.NewReader(data)) - if err != nil { - return err - } - httpReq.Header.Set("Content-Type", "application/json") - httpReq = httpReq.WithContext(ctx) - - httpResp, err := RetryHTTPDo(client, httpReq, NewExponentialBackOff()) - if err != nil { - return err - } - defer httpResp.Body.Close() - - if httpResp.StatusCode != 200 { - return fmt.Errorf("HTTP status %d", httpResp.StatusCode) - } - if httpResp.Header.Get("Content-Type") != "application/json" { - return errors.New("not a JSON response") - } - - if resp == nil { - return nil - } - return json.NewDecoder(httpResp.Body).Decode(resp) -} diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/retry.go b/vendor/git.autistici.org/ai3/go-common/clientutil/retry.go deleted file mode 100644 index 3ca7b51..0000000 --- a/vendor/git.autistici.org/ai3/go-common/clientutil/retry.go +++ /dev/null @@ -1,92 +0,0 @@ -package clientutil - -import ( - "errors" - "net/http" - "time" - - "github.com/cenkalti/backoff" -) - -// NewExponentialBackOff creates a backoff.ExponentialBackOff object -// with our own default values. -func NewExponentialBackOff() *backoff.ExponentialBackOff { - b := backoff.NewExponentialBackOff() - b.InitialInterval = 100 * time.Millisecond - //b.Multiplier = 1.4142 - return b -} - -// A temporary (retriable) error is something that has a Temporary method. -type tempError interface { - Temporary() bool -} - -type tempErrorWrapper struct { - error -} - -func (t tempErrorWrapper) Temporary() bool { return true } - -// TempError makes a temporary (retriable) error out of a normal error. -func TempError(err error) error { - return tempErrorWrapper{err} -} - -// Retry operation op until it succeeds according to the backoff -// policy b. -// -// Note that this function reverses the error semantics of -// backoff.Operation: all errors are permanent unless explicitly -// marked as temporary (i.e. they have a Temporary() method that -// returns true). This is to better align with the errors returned by -// the net package. -func Retry(op backoff.Operation, b backoff.BackOff) error { - innerOp := func() error { - err := op() - if err == nil { - return err - } - if tmpErr, ok := err.(tempError); ok && tmpErr.Temporary() { - return err - } - return backoff.Permanent(err) - } - return backoff.Retry(innerOp, b) -} - -var errHTTPBackOff = TempError(errors.New("temporary http error")) - -func isStatusTemporary(code int) bool { - switch code { - case http.StatusTooManyRequests, http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout: - return true - default: - return false - } -} - -// RetryHTTPDo retries an HTTP request until it succeeds, according to -// the backoff policy b. It will retry on temporary network errors and -// upon receiving specific temporary HTTP errors. It will use the -// context associated with the HTTP request object. -func RetryHTTPDo(client *http.Client, req *http.Request, b backoff.BackOff) (*http.Response, error) { - var resp *http.Response - op := func() error { - // Clear up previous response if set. - if resp != nil { - resp.Body.Close() - } - - var err error - resp, err = client.Do(req) - if err == nil && isStatusTemporary(resp.StatusCode) { - resp.Body.Close() - return errHTTPBackOff - } - return err - } - - err := Retry(op, backoff.WithContext(b, req.Context())) - return resp, err -} diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/track.go b/vendor/git.autistici.org/ai3/go-common/clientutil/track.go new file mode 100644 index 0000000..2db20bb --- /dev/null +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/track.go @@ -0,0 +1,123 @@ +package clientutil + +import ( + "math/rand" + "sync" + "time" +) + +// The backendTracker tracks the state of the targets associated with +// a backend, and periodically checks DNS for updates. +type backendTracker struct { + log logger + addr string + resolver resolver + stopCh chan struct{} + + mx sync.Mutex + resolved []string + failed map[string]time.Time +} + +func newBackendTracker(addr string, resolver resolver, logger logger) *backendTracker { + // Resolve the targets once before returning. + b := &backendTracker{ + addr: addr, + resolver: resolver, + resolved: resolver.ResolveIP(addr), + failed: make(map[string]time.Time), + stopCh: make(chan struct{}), + log: logger, + } + go b.updateProc() + return b +} + +func (b *backendTracker) Close() { + close(b.stopCh) +} + +// Return the full list of targets in reverse preference order. +func (b *backendTracker) getTargets() []string { + b.mx.Lock() + defer b.mx.Unlock() + + var good, bad []string + for _, t := range b.resolved { + if _, ok := b.failed[t]; ok { + bad = append(bad, t) + } else { + good = append(good, t) + } + } + + good = shuffle(good) + bad = shuffle(bad) + + return append(good, bad...) +} + +func (b *backendTracker) setStatus(addr string, ok bool) { + b.mx.Lock() + + _, isFailed := b.failed[addr] + if isFailed && ok { + b.log.Printf("target %s now ok", addr) + delete(b.failed, addr) + } else if !isFailed && !ok { + b.log.Printf("target %s failed", addr) + b.failed[addr] = time.Now() + } + + b.mx.Unlock() +} + +var ( + backendUpdateInterval = 60 * time.Second + backendFailureRetryInterval = 60 * time.Second +) + +func (b *backendTracker) expireFailedTargets() { + b.mx.Lock() + now := time.Now() + for k, v := range b.failed { + if now.Sub(v) > backendFailureRetryInterval { + delete(b.failed, k) + } + } + b.mx.Unlock() +} + +func (b *backendTracker) updateProc() { + tick := time.NewTicker(backendUpdateInterval) + defer tick.Stop() + for { + select { + case <-b.stopCh: + return + case <-tick.C: + b.expireFailedTargets() + resolved := b.resolver.ResolveIP(b.addr) + if len(resolved) > 0 { + b.mx.Lock() + b.resolved = resolved + b.mx.Unlock() + } + } + } +} + +var shuffleSrc = rand.NewSource(time.Now().UnixNano()) + +// Re-order elements of a slice randomly. +func shuffle(values []string) []string { + if len(values) < 2 { + return values + } + rnd := rand.New(shuffleSrc) + for i := len(values) - 1; i > 0; i-- { + j := rnd.Intn(i + 1) + values[i], values[j] = values[j], values[i] + } + return values +} diff --git a/vendor/git.autistici.org/ai3/go-common/clientutil/transport.go b/vendor/git.autistici.org/ai3/go-common/clientutil/transport.go index e4f98e3..843a760 100644 --- a/vendor/git.autistici.org/ai3/go-common/clientutil/transport.go +++ b/vendor/git.autistici.org/ai3/go-common/clientutil/transport.go @@ -3,170 +3,63 @@ package clientutil import ( "context" "crypto/tls" - "errors" - "log" "net" "net/http" "sync" "time" ) -var errAllBackendsFailed = errors.New("all backends failed") - -type dnsResolver struct{} - -func (r *dnsResolver) ResolveIPs(hosts []string) []string { - var resolved []string - for _, hostport := range hosts { - host, port, err := net.SplitHostPort(hostport) - if err != nil { - log.Printf("error parsing %s: %v", hostport, err) - continue - } - hostIPs, err := net.LookupIP(host) - if err != nil { - log.Printf("error resolving %s: %v", host, err) - continue - } - for _, ip := range hostIPs { - resolved = append(resolved, net.JoinHostPort(ip.String(), port)) - } - } - return resolved -} - -var defaultResolver = &dnsResolver{} - -type resolver interface { - ResolveIPs([]string) []string -} - -// Balancer for HTTP connections. It will round-robin across available -// backends, trying to avoid ones that are erroring out, until one -// succeeds or they all fail. +// The transportCache is just a cache of http transports, each +// connecting to a specific address. // -// This object should not be used for load balancing of individual -// HTTP requests: once a new connection is established, requests will -// be sent over it until it errors out. It's meant to provide a -// *reliable* connection to a set of equivalent backends for HA -// purposes. -type balancer struct { - hosts []string - resolver resolver - stop chan bool +// We use this to control the HTTP Host header and the TLS ServerName +// independently of the target address. +type transportCache struct { + tlsConfig *tls.Config - // List of currently valid (or untested) backends, and ones - // that errored out at least once. - mx sync.Mutex - addrs []string - ok map[string]bool + mx sync.RWMutex + transports map[string]http.RoundTripper } -var backendUpdateInterval = 60 * time.Second +func newTransportCache(tlsConfig *tls.Config) *transportCache { + return &transportCache{ + tlsConfig: tlsConfig, + transports: make(map[string]http.RoundTripper), + } +} -// Periodically update the list of available backends. -func (b *balancer) updateProc() { - tick := time.NewTicker(backendUpdateInterval) - for { - select { - case <-b.stop: - return - case <-tick.C: - resolved := b.resolver.ResolveIPs(b.hosts) - if len(resolved) > 0 { - b.mx.Lock() - b.addrs = resolved - b.mx.Unlock() - } - } +func (m *transportCache) newTransport(addr string) http.RoundTripper { + return &http.Transport{ + TLSClientConfig: m.tlsConfig, + DialContext: func(ctx context.Context, network, _ string) (net.Conn, error) { + return netDialContext(ctx, network, addr) + }, } } -// Returns a list of all available backends, split into "good ones" -// (no errors seen since last successful connection) and "bad ones". -func (b *balancer) getBackends() ([]string, []string) { - b.mx.Lock() - defer b.mx.Unlock() +func (m *transportCache) getTransport(addr string) http.RoundTripper { + m.mx.RLock() + t, ok := m.transports[addr] + m.mx.RUnlock() - var good, bad []string - for _, addr := range b.addrs { - if ok := b.ok[addr]; ok { - good = append(good, addr) - } else { - bad = append(bad, addr) + if !ok { + m.mx.Lock() + if t, ok = m.transports[addr]; !ok { + t = m.newTransport(addr) + m.transports[addr] = t } + m.mx.Unlock() } - return good, bad -} -func (b *balancer) notify(addr string, ok bool) { - b.mx.Lock() - b.ok[addr] = ok - b.mx.Unlock() + return t } +// Go < 1.9 does not have net.DialContext, reimplement it in terms of +// net.DialTimeout. func netDialContext(ctx context.Context, network, addr string) (net.Conn, error) { - timeout := 30 * time.Second - // Go < 1.9 does not have net.DialContext, reimplement it in - // terms of net.DialTimeout. + timeout := 60 * time.Second // some arbitrary max timeout if deadline, ok := ctx.Deadline(); ok { timeout = time.Until(deadline) } return net.DialTimeout(network, addr, timeout) } - -func (b *balancer) dial(ctx context.Context, network, addr string) (net.Conn, error) { - // Start by attempting a connection on 'good' targets. - good, bad := b.getBackends() - - for _, addr := range good { - // Go < 1.9 does not have DialContext, deal with it - conn, err := netDialContext(ctx, network, addr) - if err == nil { - return conn, nil - } else if err == context.Canceled { - // A timeout might be bad, set the error bit - // on the connection. - b.notify(addr, false) - return nil, err - } - b.notify(addr, false) - } - - for _, addr := range bad { - conn, err := netDialContext(ctx, network, addr) - if err == nil { - b.notify(addr, true) - return conn, nil - } else if err == context.Canceled { - return nil, err - } - } - - return nil, errAllBackendsFailed -} - -// NewTransport returns a suitably configured http.RoundTripper that -// talks to a specific backend service. It performs discovery of -// available backends via DNS (using A or AAAA record lookups), tries -// to route traffic away from faulty backends. -// -// It will periodically attempt to rediscover new backends. -func NewTransport(backends []string, tlsConf *tls.Config, resolver resolver) http.RoundTripper { - if resolver == nil { - resolver = defaultResolver - } - addrs := resolver.ResolveIPs(backends) - b := &balancer{ - hosts: backends, - resolver: resolver, - addrs: addrs, - ok: make(map[string]bool), - } - go b.updateProc() - - return &http.Transport{ - DialContext: b.dial, - TLSClientConfig: tlsConf, - } -} diff --git a/vendor/git.autistici.org/ai3/go-common/pwtool b/vendor/git.autistici.org/ai3/go-common/pwtool deleted file mode 100755 index 12ae67693b6dd6b345e4517959d0ca9137c48c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316456 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	W|Lwa5`P4NLNV7zC4<S{v3I9k3IkPSTnX5AY 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%0AheY4?s(&3#Bf2w{XES|&i#0kKW_n6`jq_{& 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	|@b^g$AlA+iDoS|nfCdjHStZ20aaA-2E<~wDS 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�VaxlTsbj1nX$RSsBun%3uF`_Kp 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∾m>Wcf7kJ5-Yaj7sMC2OWZALD~Y#M{PTAF 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%0D!z=`7yq`>%+!CgULCh>)JwCw&u* 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⪻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%0Def|5(P~tmxc-T&0t5+MlLF;B@$r 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%0Dg4l?xZ1CGF3Y>k$iw;v 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	d@OmHexj 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 diff --git a/vendor/git.autistici.org/ai3/replds/client.go b/vendor/git.autistici.org/ai3/replds/client.go index 331b175..343dc38 100644 --- a/vendor/git.autistici.org/ai3/replds/client.go +++ b/vendor/git.autistici.org/ai3/replds/client.go @@ -31,17 +31,17 @@ func newClient(config *clientutil.BackendConfig) (*client, error) { func (c *client) internalGetNodes(ctx context.Context, req *internalGetNodesRequest) (*internalGetNodesResponse, error) { var resp internalGetNodesResponse - err := clientutil.DoJSONHTTPRequest(ctx, c.be.Client(""), c.be.URL("")+"/api/internal/get_nodes", req, &resp) + err := c.be.Call(ctx, "", "/api/internal/get_nodes", req, &resp) return &resp, err } func (c *client) internalUpdateNodes(ctx context.Context, req *internalUpdateNodesRequest) error { - return clientutil.DoJSONHTTPRequest(ctx, c.be.Client(""), c.be.URL("")+"/api/internal/update_nodes", req, nil) + return c.be.Call(ctx, "", "/api/internal/update_nodes", req, nil) } func (c *client) SetNodes(ctx context.Context, req *SetNodesRequest) (*SetNodesResponse, error) { var resp SetNodesResponse - err := clientutil.DoJSONHTTPRequest(ctx, c.be.Client(""), c.be.URL("")+"/api/set_nodes", req, &resp) + err := c.be.Call(ctx, "", "/api/set_nodes", req, &resp) return &resp, err } diff --git a/vendor/git.autistici.org/ai3/replds/server.go b/vendor/git.autistici.org/ai3/replds/server.go index f7df02c..e3782ba 100644 --- a/vendor/git.autistici.org/ai3/replds/server.go +++ b/vendor/git.autistici.org/ai3/replds/server.go @@ -21,7 +21,7 @@ var ( pollPeriod = 120 * time.Second // Timeout for InternalGetNodes requests. - getNodesTimeout = 60 * time.Second + getNodesTimeout = 20 * time.Second ) // Node is an annotated path/value entry. diff --git a/vendor/github.com/cenkalti/backoff/README.md b/vendor/github.com/cenkalti/backoff/README.md index 13b347f..55ebc98 100644 --- a/vendor/github.com/cenkalti/backoff/README.md +++ b/vendor/github.com/cenkalti/backoff/README.md @@ -24,7 +24,7 @@ See https://godoc.org/github.com/cenkalti/backoff#pkg-examples [coveralls]: https://coveralls.io/github/cenkalti/backoff?branch=master [coveralls image]: https://coveralls.io/repos/github/cenkalti/backoff/badge.svg?branch=master -[google-http-java-client]: https://github.com/google/google-http-java-client +[google-http-java-client]: https://github.com/google/google-http-java-client/blob/da1aa993e90285ec18579f1553339b00e19b3ab5/google-http-client/src/main/java/com/google/api/client/util/ExponentialBackOff.java [exponential backoff wiki]: http://en.wikipedia.org/wiki/Exponential_backoff [advanced example]: https://godoc.org/github.com/cenkalti/backoff#example_ diff --git a/vendor/github.com/cenkalti/backoff/context.go b/vendor/github.com/cenkalti/backoff/context.go index 5d15709..d700552 100644 --- a/vendor/github.com/cenkalti/backoff/context.go +++ b/vendor/github.com/cenkalti/backoff/context.go @@ -1,9 +1,8 @@ package backoff import ( + "context" "time" - - "golang.org/x/net/context" ) // BackOffContext is a backoff policy that stops retrying after the context diff --git a/vendor/github.com/cenkalti/backoff/retry.go b/vendor/github.com/cenkalti/backoff/retry.go index 5dbd825..e65cc70 100644 --- a/vendor/github.com/cenkalti/backoff/retry.go +++ b/vendor/github.com/cenkalti/backoff/retry.go @@ -15,7 +15,6 @@ type Notify func(error, time.Duration) // Retry the operation o until it does not return error or BackOff stops. // o is guaranteed to be run at least once. -// It is the caller's responsibility to reset b after Retry returns. // // If o returns a *PermanentError, the operation is not retried, and the // wrapped error is returned. diff --git a/vendor/github.com/cenkalti/backoff/ticker.go b/vendor/github.com/cenkalti/backoff/ticker.go index e742512..e41084b 100644 --- a/vendor/github.com/cenkalti/backoff/ticker.go +++ b/vendor/github.com/cenkalti/backoff/ticker.go @@ -1,7 +1,6 @@ package backoff import ( - "runtime" "sync" "time" ) @@ -34,7 +33,6 @@ func NewTicker(b BackOff) *Ticker { } t.b.Reset() go t.run() - runtime.SetFinalizer(t, (*Ticker).Stop) return t } diff --git a/vendor/github.com/cenkalti/backoff/tries.go b/vendor/github.com/cenkalti/backoff/tries.go index d2da730..cfeefd9 100644 --- a/vendor/github.com/cenkalti/backoff/tries.go +++ b/vendor/github.com/cenkalti/backoff/tries.go @@ -3,13 +3,13 @@ package backoff import "time" /* -WithMaxTries creates a wrapper around another BackOff, which will +WithMaxRetries creates a wrapper around another BackOff, which will return Stop if NextBackOff() has been called too many times since the last time Reset() was called Note: Implementation is not thread-safe. */ -func WithMaxTries(b BackOff, max uint64) BackOff { +func WithMaxRetries(b BackOff, max uint64) BackOff { return &backOffTries{delegate: b, maxTries: max} } diff --git a/vendor/github.com/golang/protobuf/proto/Makefile b/vendor/github.com/golang/protobuf/proto/Makefile new file mode 100644 index 0000000..e2e0651 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/Makefile @@ -0,0 +1,43 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +install: + go install + +test: install generate-test-pbs + go test + + +generate-test-pbs: + make install + make -C testdata + protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto + make diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go index 3cd3249..e392575 100644 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ b/vendor/github.com/golang/protobuf/proto/clone.go @@ -35,39 +35,22 @@ package proto import ( - "fmt" "log" "reflect" "strings" ) // Clone returns a deep copy of a protocol buffer. -func Clone(src Message) Message { - in := reflect.ValueOf(src) +func Clone(pb Message) Message { + in := reflect.ValueOf(pb) if in.IsNil() { - return src + return pb } - out := reflect.New(in.Type().Elem()) - dst := out.Interface().(Message) - Merge(dst, src) - return dst -} -// Merger is the interface representing objects that can merge messages of the same type. -type Merger interface { - // Merge merges src into this message. - // Required and optional fields that are set in src will be set to that value in dst. - // Elements of repeated fields will be appended. - // - // Merge may panic if called with a different argument type than the receiver. - Merge(src Message) -} - -// generatedMerger is the custom merge method that generated protos will have. -// We must add this method since a generate Merge method will conflict with -// many existing protos that have a Merge data field already defined. -type generatedMerger interface { - XXX_Merge(src Message) + out := reflect.New(in.Type().Elem()) + // out is empty so a merge is a deep copy. + mergeStruct(out.Elem(), in.Elem()) + return out.Interface().(Message) } // Merge merges src into dst. @@ -75,24 +58,17 @@ type generatedMerger interface { // Elements of repeated fields will be appended. // Merge panics if src and dst are not the same type, or if dst is nil. func Merge(dst, src Message) { - if m, ok := dst.(Merger); ok { - m.Merge(src) - return - } - in := reflect.ValueOf(src) out := reflect.ValueOf(dst) if out.IsNil() { panic("proto: nil destination") } if in.Type() != out.Type() { - panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) + // Explicit test prior to mergeStruct so that mistyped nils will fail + panic("proto: type mismatch") } if in.IsNil() { - return // Merge from nil src is a noop - } - if m, ok := dst.(generatedMerger); ok { - m.XXX_Merge(src) + // Merging nil into non-nil is a quiet no-op return } mergeStruct(out.Elem(), in.Elem()) @@ -108,7 +84,7 @@ func mergeStruct(out, in reflect.Value) { mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) } - if emIn, err := extendable(in.Addr().Interface()); err == nil { + if emIn, ok := extendable(in.Addr().Interface()); ok { emOut, _ := extendable(out.Addr().Interface()) mIn, muIn := emIn.extensionsRead() if mIn != nil { diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go index d9aa3c4..aa20729 100644 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ b/vendor/github.com/golang/protobuf/proto/decode.go @@ -39,6 +39,8 @@ import ( "errors" "fmt" "io" + "os" + "reflect" ) // errOverflow is returned when an integer is too large to be represented. @@ -48,6 +50,10 @@ var errOverflow = errors.New("proto: integer overflow") // wire type is encountered. It does not get returned to user code. var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") +// The fundamental decoders that interpret bytes on the wire. +// Those that take integer types all return uint64 and are +// therefore of type valueDecoder. + // DecodeVarint reads a varint-encoded integer from the slice. // It returns the integer and the number of bytes consumed, or // zero if there is not enough. @@ -261,6 +267,9 @@ func (p *Buffer) DecodeZigzag32() (x uint64, err error) { return } +// These are not ValueDecoders: they produce an array of bytes or a string. +// bytes, embedded messages + // DecodeRawBytes reads a count-delimited byte buffer from the Buffer. // This is the format used for the bytes protocol buffer // type and for embedded messages. @@ -302,29 +311,81 @@ func (p *Buffer) DecodeStringBytes() (s string, err error) { return string(buf), nil } +// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. +// If the protocol buffer has extensions, and the field matches, add it as an extension. +// Otherwise, if the XXX_unrecognized field exists, append the skipped data there. +func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error { + oi := o.index + + err := o.skip(t, tag, wire) + if err != nil { + return err + } + + if !unrecField.IsValid() { + return nil + } + + ptr := structPointer_Bytes(base, unrecField) + + // Add the skipped field to struct field + obuf := o.buf + + o.buf = *ptr + o.EncodeVarint(uint64(tag<<3 | wire)) + *ptr = append(o.buf, obuf[oi:o.index]...) + + o.buf = obuf + + return nil +} + +// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. +func (o *Buffer) skip(t reflect.Type, tag, wire int) error { + + var u uint64 + var err error + + switch wire { + case WireVarint: + _, err = o.DecodeVarint() + case WireFixed64: + _, err = o.DecodeFixed64() + case WireBytes: + _, err = o.DecodeRawBytes(false) + case WireFixed32: + _, err = o.DecodeFixed32() + case WireStartGroup: + for { + u, err = o.DecodeVarint() + if err != nil { + break + } + fwire := int(u & 0x7) + if fwire == WireEndGroup { + break + } + ftag := int(u >> 3) + err = o.skip(t, ftag, fwire) + if err != nil { + break + } + } + default: + err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t) + } + return err +} + // Unmarshaler is the interface representing objects that can -// unmarshal themselves. The argument points to data that may be +// unmarshal themselves. The method should reset the receiver before +// decoding starts. The argument points to data that may be // overwritten, so implementations should not keep references to the // buffer. -// Unmarshal implementations should not clear the receiver. -// Any unmarshaled data should be merged into the receiver. -// Callers of Unmarshal that do not want to retain existing data -// should Reset the receiver before calling Unmarshal. type Unmarshaler interface { Unmarshal([]byte) error } -// newUnmarshaler is the interface representing objects that can -// unmarshal themselves. The semantics are identical to Unmarshaler. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newUnmarshaler interface { - XXX_Unmarshal([]byte) error -} - // Unmarshal parses the protocol buffer representation in buf and places the // decoded result in pb. If the struct underlying pb does not match // the data in buf, the results can be unpredictable. @@ -334,13 +395,7 @@ type newUnmarshaler interface { // to preserve and append to existing data. func Unmarshal(buf []byte, pb Message) error { pb.Reset() - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) + return UnmarshalMerge(buf, pb) } // UnmarshalMerge parses the protocol buffer representation in buf and @@ -350,16 +405,8 @@ func Unmarshal(buf []byte, pb Message) error { // UnmarshalMerge merges into existing data in pb. // Most code should use Unmarshal instead. func UnmarshalMerge(buf []byte, pb Message) error { - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } + // If the object can unmarshal itself, let it. if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 return u.Unmarshal(buf) } return NewBuffer(buf).Unmarshal(pb) @@ -375,17 +422,12 @@ func (p *Buffer) DecodeMessage(pb Message) error { } // DecodeGroup reads a tag-delimited group from the Buffer. -// StartGroup tag is already consumed. This function consumes -// EndGroup tag. func (p *Buffer) DecodeGroup(pb Message) error { - b := p.buf[p.index:] - x, y := findEndGroup(b) - if x < 0 { - return io.ErrUnexpectedEOF + typ, base, err := getbase(pb) + if err != nil { + return err } - err := Unmarshal(b[:x], pb) - p.index += y - return err + return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base) } // Unmarshal parses the protocol buffer representation in the @@ -396,33 +438,533 @@ func (p *Buffer) DecodeGroup(pb Message) error { // Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. func (p *Buffer) Unmarshal(pb Message) error { // If the object can unmarshal itself, let it. - if u, ok := pb.(newUnmarshaler); ok { - err := u.XXX_Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 err := u.Unmarshal(p.buf[p.index:]) p.index = len(p.buf) return err } - // Slow workaround for messages that aren't Unmarshalers. - // This includes some hand-coded .pb.go files and - // bootstrap protos. - // TODO: fix all of those and then add Unmarshal to - // the Message interface. Then: - // The cast above and code below can be deleted. - // The old unmarshaler can be deleted. - // Clients can call Unmarshal directly (can already do that, actually). - var info InternalMessageInfo - err := info.Unmarshal(pb, p.buf[p.index:]) - p.index = len(p.buf) + typ, base, err := getbase(pb) + if err != nil { + return err + } + + err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base) + + if collectStats { + stats.Decode++ + } + + return err +} + +// unmarshalType does the work of unmarshaling a structure. +func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error { + var state errorState + required, reqFields := prop.reqCount, uint64(0) + + var err error + for err == nil && o.index < len(o.buf) { + oi := o.index + var u uint64 + u, err = o.DecodeVarint() + if err != nil { + break + } + wire := int(u & 0x7) + if wire == WireEndGroup { + if is_group { + if required > 0 { + // Not enough information to determine the exact field. + // (See below.) + return &RequiredNotSetError{"{Unknown}"} + } + return nil // input is satisfied + } + return fmt.Errorf("proto: %s: wiretype end group for non-group", st) + } + tag := int(u >> 3) + if tag <= 0 { + return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire) + } + fieldnum, ok := prop.decoderTags.get(tag) + if !ok { + // Maybe it's an extension? + if prop.extendable { + if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) { + if err = o.skip(st, tag, wire); err == nil { + extmap := e.extensionsWrite() + ext := extmap[int32(tag)] // may be missing + ext.enc = append(ext.enc, o.buf[oi:o.index]...) + extmap[int32(tag)] = ext + } + continue + } + } + // Maybe it's a oneof? + if prop.oneofUnmarshaler != nil { + m := structPointer_Interface(base, st).(Message) + // First return value indicates whether tag is a oneof field. + ok, err = prop.oneofUnmarshaler(m, tag, wire, o) + if err == ErrInternalBadWireType { + // Map the error to something more descriptive. + // Do the formatting here to save generated code space. + err = fmt.Errorf("bad wiretype for oneof field in %T", m) + } + if ok { + continue + } + } + err = o.skipAndSave(st, tag, wire, base, prop.unrecField) + continue + } + p := prop.Prop[fieldnum] + + if p.dec == nil { + fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name) + continue + } + dec := p.dec + if wire != WireStartGroup && wire != p.WireType { + if wire == WireBytes && p.packedDec != nil { + // a packable field + dec = p.packedDec + } else { + err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType) + continue + } + } + decErr := dec(o, p, base) + if decErr != nil && !state.shouldContinue(decErr, p) { + err = decErr + } + if err == nil && p.Required { + // Successfully decoded a required field. + if tag <= 64 { + // use bitmap for fields 1-64 to catch field reuse. + var mask uint64 = 1 << uint64(tag-1) + if reqFields&mask == 0 { + // new required field + reqFields |= mask + required-- + } + } else { + // This is imprecise. It can be fooled by a required field + // with a tag > 64 that is encoded twice; that's very rare. + // A fully correct implementation would require allocating + // a data structure, which we would like to avoid. + required-- + } + } + } + if err == nil { + if is_group { + return io.ErrUnexpectedEOF + } + if state.err != nil { + return state.err + } + if required > 0 { + // Not enough information to determine the exact field. If we use extra + // CPU, we could determine the field only if the missing required field + // has a tag <= 64 and we check reqFields. + return &RequiredNotSetError{"{Unknown}"} + } + } + return err +} + +// Individual type decoders +// For each, +// u is the decoded value, +// v is a pointer to the field (pointer) in the struct + +// Sizes of the pools to allocate inside the Buffer. +// The goal is modest amortization and allocation +// on at least 16-byte boundaries. +const ( + boolPoolSize = 16 + uint32PoolSize = 8 + uint64PoolSize = 4 +) + +// Decode a bool. +func (o *Buffer) dec_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + if len(o.bools) == 0 { + o.bools = make([]bool, boolPoolSize) + } + o.bools[0] = u != 0 + *structPointer_Bool(base, p.field) = &o.bools[0] + o.bools = o.bools[1:] + return nil +} + +func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + *structPointer_BoolVal(base, p.field) = u != 0 + return nil +} + +// Decode an int32. +func (o *Buffer) dec_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word32_Set(structPointer_Word32(base, p.field), o, uint32(u)) + return nil +} + +func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u)) + return nil +} + +// Decode an int64. +func (o *Buffer) dec_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word64_Set(structPointer_Word64(base, p.field), o, u) + return nil +} + +func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word64Val_Set(structPointer_Word64Val(base, p.field), o, u) + return nil +} + +// Decode a string. +func (o *Buffer) dec_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + *structPointer_String(base, p.field) = &s + return nil +} + +func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + *structPointer_StringVal(base, p.field) = s + return nil +} + +// Decode a slice of bytes ([]byte). +func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error { + b, err := o.DecodeRawBytes(true) + if err != nil { + return err + } + *structPointer_Bytes(base, p.field) = b + return nil +} + +// Decode a slice of bools ([]bool). +func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + v := structPointer_BoolSlice(base, p.field) + *v = append(*v, u != 0) + return nil +} + +// Decode a slice of bools ([]bool) in packed format. +func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error { + v := structPointer_BoolSlice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded bools + fin := o.index + nb + if fin < o.index { + return errOverflow + } + + y := *v + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + y = append(y, u != 0) + } + + *v = y + return nil +} + +// Decode a slice of int32s ([]int32). +func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + structPointer_Word32Slice(base, p.field).Append(uint32(u)) + return nil +} + +// Decode a slice of int32s ([]int32) in packed format. +func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error { + v := structPointer_Word32Slice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded int32s + + fin := o.index + nb + if fin < o.index { + return errOverflow + } + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + v.Append(uint32(u)) + } + return nil +} + +// Decode a slice of int64s ([]int64). +func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + + structPointer_Word64Slice(base, p.field).Append(u) + return nil +} + +// Decode a slice of int64s ([]int64) in packed format. +func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error { + v := structPointer_Word64Slice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded int64s + + fin := o.index + nb + if fin < o.index { + return errOverflow + } + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + v.Append(u) + } + return nil +} + +// Decode a slice of strings ([]string). +func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + v := structPointer_StringSlice(base, p.field) + *v = append(*v, s) + return nil +} + +// Decode a slice of slice of bytes ([][]byte). +func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error { + b, err := o.DecodeRawBytes(true) + if err != nil { + return err + } + v := structPointer_BytesSlice(base, p.field) + *v = append(*v, b) + return nil +} + +// Decode a map field. +func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { + raw, err := o.DecodeRawBytes(false) + if err != nil { + return err + } + oi := o.index // index at the end of this map entry + o.index -= len(raw) // move buffer back to start of map entry + + mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V + if mptr.Elem().IsNil() { + mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem())) + } + v := mptr.Elem() // map[K]V + + // Prepare addressable doubly-indirect placeholders for the key and value types. + // See enc_new_map for why. + keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K + keybase := toStructPointer(keyptr.Addr()) // **K + + var valbase structPointer + var valptr reflect.Value + switch p.mtype.Elem().Kind() { + case reflect.Slice: + // []byte + var dummy []byte + valptr = reflect.ValueOf(&dummy) // *[]byte + valbase = toStructPointer(valptr) // *[]byte + case reflect.Ptr: + // message; valptr is **Msg; need to allocate the intermediate pointer + valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V + valptr.Set(reflect.New(valptr.Type().Elem())) + valbase = toStructPointer(valptr) + default: + // everything else + valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V + valbase = toStructPointer(valptr.Addr()) // **V + } + + // Decode. + // This parses a restricted wire format, namely the encoding of a message + // with two fields. See enc_new_map for the format. + for o.index < oi { + // tagcode for key and value properties are always a single byte + // because they have tags 1 and 2. + tagcode := o.buf[o.index] + o.index++ + switch tagcode { + case p.mkeyprop.tagcode[0]: + if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil { + return err + } + case p.mvalprop.tagcode[0]: + if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil { + return err + } + default: + // TODO: Should we silently skip this instead? + return fmt.Errorf("proto: bad map data tag %d", raw[0]) + } + } + keyelem, valelem := keyptr.Elem(), valptr.Elem() + if !keyelem.IsValid() { + keyelem = reflect.Zero(p.mtype.Key()) + } + if !valelem.IsValid() { + valelem = reflect.Zero(p.mtype.Elem()) + } + + v.SetMapIndex(keyelem, valelem) + return nil +} + +// Decode a group. +func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error { + bas := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(bas) { + // allocate new nested message + bas = toStructPointer(reflect.New(p.stype)) + structPointer_SetStructPointer(base, p.field, bas) + } + return o.unmarshalType(p.stype, p.sprop, true, bas) +} + +// Decode an embedded message. +func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) { + raw, e := o.DecodeRawBytes(false) + if e != nil { + return e + } + + bas := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(bas) { + // allocate new nested message + bas = toStructPointer(reflect.New(p.stype)) + structPointer_SetStructPointer(base, p.field, bas) + } + + // If the object can unmarshal itself, let it. + if p.isUnmarshaler { + iv := structPointer_Interface(bas, p.stype) + return iv.(Unmarshaler).Unmarshal(raw) + } + + obuf := o.buf + oi := o.index + o.buf = raw + o.index = 0 + + err = o.unmarshalType(p.stype, p.sprop, false, bas) + o.buf = obuf + o.index = oi + + return err +} + +// Decode a slice of embedded messages. +func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error { + return o.dec_slice_struct(p, false, base) +} + +// Decode a slice of embedded groups. +func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error { + return o.dec_slice_struct(p, true, base) +} + +// Decode a slice of structs ([]*struct). +func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error { + v := reflect.New(p.stype) + bas := toStructPointer(v) + structPointer_StructPointerSlice(base, p.field).Append(bas) + + if is_group { + err := o.unmarshalType(p.stype, p.sprop, is_group, bas) + return err + } + + raw, err := o.DecodeRawBytes(false) + if err != nil { + return err + } + + // If the object can unmarshal itself, let it. + if p.isUnmarshaler { + iv := v.Interface() + return iv.(Unmarshaler).Unmarshal(raw) + } + + obuf := o.buf + oi := o.index + o.buf = raw + o.index = 0 + + err = o.unmarshalType(p.stype, p.sprop, is_group, bas) + + o.buf = obuf + o.index = oi + return err } diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go deleted file mode 100644 index dea2617..0000000 --- a/vendor/github.com/golang/protobuf/proto/discard.go +++ /dev/null @@ -1,350 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2017 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -type generatedDiscarder interface { - XXX_DiscardUnknown() -} - -// DiscardUnknown recursively discards all unknown fields from this message -// and all embedded messages. -// -// When unmarshaling a message with unrecognized fields, the tags and values -// of such fields are preserved in the Message. This allows a later call to -// marshal to be able to produce a message that continues to have those -// unrecognized fields. To avoid this, DiscardUnknown is used to -// explicitly clear the unknown fields after unmarshaling. -// -// For proto2 messages, the unknown fields of message extensions are only -// discarded from messages that have been accessed via GetExtension. -func DiscardUnknown(m Message) { - if m, ok := m.(generatedDiscarder); ok { - m.XXX_DiscardUnknown() - return - } - // TODO: Dynamically populate a InternalMessageInfo for legacy messages, - // but the master branch has no implementation for InternalMessageInfo, - // so it would be more work to replicate that approach. - discardLegacy(m) -} - -// DiscardUnknown recursively discards all unknown fields. -func (a *InternalMessageInfo) DiscardUnknown(m Message) { - di := atomicLoadDiscardInfo(&a.discard) - if di == nil { - di = getDiscardInfo(reflect.TypeOf(m).Elem()) - atomicStoreDiscardInfo(&a.discard, di) - } - di.discard(toPointer(&m)) -} - -type discardInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []discardFieldInfo - unrecognized field -} - -type discardFieldInfo struct { - field field // Offset of field, guaranteed to be valid - discard func(src pointer) -} - -var ( - discardInfoMap = map[reflect.Type]*discardInfo{} - discardInfoLock sync.Mutex -) - -func getDiscardInfo(t reflect.Type) *discardInfo { - discardInfoLock.Lock() - defer discardInfoLock.Unlock() - di := discardInfoMap[t] - if di == nil { - di = &discardInfo{typ: t} - discardInfoMap[t] = di - } - return di -} - -func (di *discardInfo) discard(src pointer) { - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&di.initialized) == 0 { - di.computeDiscardInfo() - } - - for _, fi := range di.fields { - sfp := src.offset(fi.field) - fi.discard(sfp) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { - // Ignore lock since DiscardUnknown is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - DiscardUnknown(m) - } - } - } - - if di.unrecognized.IsValid() { - *src.offset(di.unrecognized).toBytes() = nil - } -} - -func (di *discardInfo) computeDiscardInfo() { - di.lock.Lock() - defer di.lock.Unlock() - if di.initialized != 0 { - return - } - t := di.typ - n := t.NumField() - - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - dfi := discardFieldInfo{field: toField(&f)} - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) - case isSlice: // E.g., []*pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sps := src.getPointerSlice() - for _, sp := range sps { - if !sp.isNil() { - di.discard(sp) - } - } - } - default: // E.g., *pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sp := src.getPointer() - if !sp.isNil() { - di.discard(sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) - default: // E.g., map[K]V - if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) - dfi.discard = func(src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - DiscardUnknown(val.Interface().(Message)) - } - } - } else { - dfi.discard = func(pointer) {} // Noop - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) - default: // E.g., interface{} - // TODO: Make this faster? - dfi.discard = func(src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - DiscardUnknown(sv.Interface().(Message)) - } - } - } - } - default: - continue - } - di.fields = append(di.fields, dfi) - } - - di.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - di.unrecognized = toField(&f) - } - - atomic.StoreInt32(&di.initialized, 1) -} - -func discardLegacy(m Message) { - v := reflect.ValueOf(m) - if v.Kind() != reflect.Ptr || v.IsNil() { - return - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return - } - t := v.Type() - - for i := 0; i < v.NumField(); i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - vf := v.Field(i) - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) - case isSlice: // E.g., []*pb.T - for j := 0; j < vf.Len(); j++ { - discardLegacy(vf.Index(j).Interface().(Message)) - } - default: // E.g., *pb.T - discardLegacy(vf.Interface().(Message)) - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) - default: // E.g., map[K]V - tv := vf.Type().Elem() - if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) - for _, key := range vf.MapKeys() { - val := vf.MapIndex(key) - discardLegacy(val.Interface().(Message)) - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) - default: // E.g., test_proto.isCommunique_Union interface - if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { - vf = vf.Elem() // E.g., *test_proto.Communique_Msg - if !vf.IsNil() { - vf = vf.Elem() // E.g., test_proto.Communique_Msg - vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value - if vf.Kind() == reflect.Ptr { - discardLegacy(vf.Interface().(Message)) - } - } - } - } - } - } - - if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { - if vf.Type() != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - vf.Set(reflect.ValueOf([]byte(nil))) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(m); err == nil { - // Ignore lock since discardLegacy is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - discardLegacy(m) - } - } - } -} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go index c27d35f..8b84d1b 100644 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -39,6 +39,7 @@ import ( "errors" "fmt" "reflect" + "sort" ) // RequiredNotSetError is the error returned if Marshal is called with @@ -81,6 +82,10 @@ var ( const maxVarintBytes = 10 // maximum length of a varint +// maxMarshalSize is the largest allowed size of an encoded protobuf, +// since C++ and Java use signed int32s for the size. +const maxMarshalSize = 1<<31 - 1 + // EncodeVarint returns the varint encoding of x. // This is the format for the // int32, int64, uint32, uint64, bool, and enum @@ -114,27 +119,18 @@ func (p *Buffer) EncodeVarint(x uint64) error { // SizeVarint returns the varint encoding size of an integer. func SizeVarint(x uint64) int { - switch { - case x < 1<<7: - return 1 - case x < 1<<14: - return 2 - case x < 1<<21: - return 3 - case x < 1<<28: - return 4 - case x < 1<<35: - return 5 - case x < 1<<42: - return 6 - case x < 1<<49: - return 7 - case x < 1<<56: - return 8 - case x < 1<<63: - return 9 - } - return 10 + return sizeVarint(x) +} + +func sizeVarint(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n } // EncodeFixed64 writes a 64-bit integer to the Buffer. @@ -153,6 +149,10 @@ func (p *Buffer) EncodeFixed64(x uint64) error { return nil } +func sizeFixed64(x uint64) int { + return 8 +} + // EncodeFixed32 writes a 32-bit integer to the Buffer. // This is the format for the // fixed32, sfixed32, and float protocol buffer types. @@ -165,12 +165,20 @@ func (p *Buffer) EncodeFixed32(x uint64) error { return nil } +func sizeFixed32(x uint64) int { + return 4 +} + // EncodeZigzag64 writes a zigzag-encoded 64-bit integer // to the Buffer. // This is the format used for the sint64 protocol buffer type. func (p *Buffer) EncodeZigzag64(x uint64) error { // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63))) +} + +func sizeZigzag64(x uint64) int { + return sizeVarint((x << 1) ^ uint64((int64(x) >> 63))) } // EncodeZigzag32 writes a zigzag-encoded 32-bit integer @@ -181,6 +189,10 @@ func (p *Buffer) EncodeZigzag32(x uint64) error { return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) } +func sizeZigzag32(x uint64) int { + return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + // EncodeRawBytes writes a count-delimited byte buffer to the Buffer. // This is the format used for the bytes protocol buffer // type and for embedded messages. @@ -190,6 +202,11 @@ func (p *Buffer) EncodeRawBytes(b []byte) error { return nil } +func sizeRawBytes(b []byte) int { + return sizeVarint(uint64(len(b))) + + len(b) +} + // EncodeStringBytes writes an encoded string to the Buffer. // This is the format used for the proto2 string type. func (p *Buffer) EncodeStringBytes(s string) error { @@ -198,17 +215,319 @@ func (p *Buffer) EncodeStringBytes(s string) error { return nil } +func sizeStringBytes(s string) int { + return sizeVarint(uint64(len(s))) + + len(s) +} + // Marshaler is the interface representing objects that can marshal themselves. type Marshaler interface { Marshal() ([]byte, error) } +// Marshal takes the protocol buffer +// and encodes it into the wire format, returning the data. +func Marshal(pb Message) ([]byte, error) { + // Can the object marshal itself? + if m, ok := pb.(Marshaler); ok { + return m.Marshal() + } + p := NewBuffer(nil) + err := p.Marshal(pb) + if p.buf == nil && err == nil { + // Return a non-nil slice on success. + return []byte{}, nil + } + return p.buf, err +} + // EncodeMessage writes the protocol buffer to the Buffer, // prefixed by a varint-encoded length. func (p *Buffer) EncodeMessage(pb Message) error { - siz := Size(pb) - p.EncodeVarint(uint64(siz)) - return p.Marshal(pb) + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return ErrNil + } + if err == nil { + var state errorState + err = p.enc_len_struct(GetProperties(t.Elem()), base, &state) + } + return err +} + +// Marshal takes the protocol buffer +// and encodes it into the wire format, writing the result to the +// Buffer. +func (p *Buffer) Marshal(pb Message) error { + // Can the object marshal itself? + if m, ok := pb.(Marshaler); ok { + data, err := m.Marshal() + p.buf = append(p.buf, data...) + return err + } + + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return ErrNil + } + if err == nil { + err = p.enc_struct(GetProperties(t.Elem()), base) + } + + if collectStats { + (stats).Encode++ // Parens are to work around a goimports bug. + } + + if len(p.buf) > maxMarshalSize { + return ErrTooLarge + } + return err +} + +// Size returns the encoded size of a protocol buffer. +func Size(pb Message) (n int) { + // Can the object marshal itself? If so, Size is slow. + // TODO: add Size to Marshaler, or add a Sizer interface. + if m, ok := pb.(Marshaler); ok { + b, _ := m.Marshal() + return len(b) + } + + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return 0 + } + if err == nil { + n = size_struct(GetProperties(t.Elem()), base) + } + + if collectStats { + (stats).Size++ // Parens are to work around a goimports bug. + } + + return +} + +// Individual type encoders. + +// Encode a bool. +func (o *Buffer) enc_bool(p *Properties, base structPointer) error { + v := *structPointer_Bool(base, p.field) + if v == nil { + return ErrNil + } + x := 0 + if *v { + x = 1 + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error { + v := *structPointer_BoolVal(base, p.field) + if !v { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, 1) + return nil +} + +func size_bool(p *Properties, base structPointer) int { + v := *structPointer_Bool(base, p.field) + if v == nil { + return 0 + } + return len(p.tagcode) + 1 // each bool takes exactly one byte +} + +func size_proto3_bool(p *Properties, base structPointer) int { + v := *structPointer_BoolVal(base, p.field) + if !v && !p.oneof { + return 0 + } + return len(p.tagcode) + 1 // each bool takes exactly one byte +} + +// Encode an int32. +func (o *Buffer) enc_int32(p *Properties, base structPointer) error { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return ErrNil + } + x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error { + v := structPointer_Word32Val(base, p.field) + x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func size_int32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return 0 + } + x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +func size_proto3_int32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32Val(base, p.field) + x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +// Encode a uint32. +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_uint32(p *Properties, base structPointer) error { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return ErrNil + } + x := word32_Get(v) + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error { + v := structPointer_Word32Val(base, p.field) + x := word32Val_Get(v) + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func size_uint32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return 0 + } + x := word32_Get(v) + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +func size_proto3_uint32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32Val(base, p.field) + x := word32Val_Get(v) + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +// Encode an int64. +func (o *Buffer) enc_int64(p *Properties, base structPointer) error { + v := structPointer_Word64(base, p.field) + if word64_IsNil(v) { + return ErrNil + } + x := word64_Get(v) + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, x) + return nil +} + +func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error { + v := structPointer_Word64Val(base, p.field) + x := word64Val_Get(v) + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, x) + return nil +} + +func size_int64(p *Properties, base structPointer) (n int) { + v := structPointer_Word64(base, p.field) + if word64_IsNil(v) { + return 0 + } + x := word64_Get(v) + n += len(p.tagcode) + n += p.valSize(x) + return +} + +func size_proto3_int64(p *Properties, base structPointer) (n int) { + v := structPointer_Word64Val(base, p.field) + x := word64Val_Get(v) + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(x) + return +} + +// Encode a string. +func (o *Buffer) enc_string(p *Properties, base structPointer) error { + v := *structPointer_String(base, p.field) + if v == nil { + return ErrNil + } + x := *v + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(x) + return nil +} + +func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error { + v := *structPointer_StringVal(base, p.field) + if v == "" { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(v) + return nil +} + +func size_string(p *Properties, base structPointer) (n int) { + v := *structPointer_String(base, p.field) + if v == nil { + return 0 + } + x := *v + n += len(p.tagcode) + n += sizeStringBytes(x) + return +} + +func size_proto3_string(p *Properties, base structPointer) (n int) { + v := *structPointer_StringVal(base, p.field) + if v == "" && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeStringBytes(v) + return } // All protocol buffer fields are nillable, but be careful. @@ -219,3 +538,825 @@ func isNil(v reflect.Value) bool { } return false } + +// Encode a message struct. +func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error { + var state errorState + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return ErrNil + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, err := m.Marshal() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return state.err + } + + o.buf = append(o.buf, p.tagcode...) + return o.enc_len_struct(p.sprop, structp, &state) +} + +func size_struct_message(p *Properties, base structPointer) int { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return 0 + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, _ := m.Marshal() + n0 := len(p.tagcode) + n1 := sizeRawBytes(data) + return n0 + n1 + } + + n0 := len(p.tagcode) + n1 := size_struct(p.sprop, structp) + n2 := sizeVarint(uint64(n1)) // size of encoded length + return n0 + n1 + n2 +} + +// Encode a group struct. +func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error { + var state errorState + b := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(b) { + return ErrNil + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) + err := o.enc_struct(p.sprop, b) + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) + return state.err +} + +func size_struct_group(p *Properties, base structPointer) (n int) { + b := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(b) { + return 0 + } + + n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup)) + n += size_struct(p.sprop, b) + n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup)) + return +} + +// Encode a slice of bools ([]bool). +func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return ErrNil + } + for _, x := range s { + o.buf = append(o.buf, p.tagcode...) + v := uint64(0) + if x { + v = 1 + } + p.valEnc(o, v) + } + return nil +} + +func size_slice_bool(p *Properties, base structPointer) int { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return 0 + } + return l * (len(p.tagcode) + 1) // each bool takes exactly one byte +} + +// Encode a slice of bools ([]bool) in packed format. +func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(l)) // each bool takes exactly one byte + for _, x := range s { + v := uint64(0) + if x { + v = 1 + } + p.valEnc(o, v) + } + return nil +} + +func size_slice_packed_bool(p *Properties, base structPointer) (n int) { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return 0 + } + n += len(p.tagcode) + n += sizeVarint(uint64(l)) + n += l // each bool takes exactly one byte + return +} + +// Encode a slice of bytes ([]byte). +func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error { + s := *structPointer_Bytes(base, p.field) + if s == nil { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(s) + return nil +} + +func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error { + s := *structPointer_Bytes(base, p.field) + if len(s) == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(s) + return nil +} + +func size_slice_byte(p *Properties, base structPointer) (n int) { + s := *structPointer_Bytes(base, p.field) + if s == nil && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeRawBytes(s) + return +} + +func size_proto3_slice_byte(p *Properties, base structPointer) (n int) { + s := *structPointer_Bytes(base, p.field) + if len(s) == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeRawBytes(s) + return +} + +// Encode a slice of int32s ([]int32). +func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + p.valEnc(o, uint64(x)) + } + return nil +} + +func size_slice_int32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + n += p.valSize(uint64(x)) + } + return +} + +// Encode a slice of int32s ([]int32) in packed format. +func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + p.valEnc(buf, uint64(x)) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_int32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + bufSize += p.valSize(uint64(x)) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of uint32s ([]uint32). +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + x := s.Index(i) + p.valEnc(o, uint64(x)) + } + return nil +} + +func size_slice_uint32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + x := s.Index(i) + n += p.valSize(uint64(x)) + } + return +} + +// Encode a slice of uint32s ([]uint32) in packed format. +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + p.valEnc(buf, uint64(s.Index(i))) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_uint32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + bufSize += p.valSize(uint64(s.Index(i))) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of int64s ([]int64). +func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, s.Index(i)) + } + return nil +} + +func size_slice_int64(p *Properties, base structPointer) (n int) { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + n += p.valSize(s.Index(i)) + } + return +} + +// Encode a slice of int64s ([]int64) in packed format. +func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + p.valEnc(buf, s.Index(i)) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_int64(p *Properties, base structPointer) (n int) { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + bufSize += p.valSize(s.Index(i)) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of slice of bytes ([][]byte). +func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error { + ss := *structPointer_BytesSlice(base, p.field) + l := len(ss) + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(ss[i]) + } + return nil +} + +func size_slice_slice_byte(p *Properties, base structPointer) (n int) { + ss := *structPointer_BytesSlice(base, p.field) + l := len(ss) + if l == 0 { + return 0 + } + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + n += sizeRawBytes(ss[i]) + } + return +} + +// Encode a slice of strings ([]string). +func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error { + ss := *structPointer_StringSlice(base, p.field) + l := len(ss) + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(ss[i]) + } + return nil +} + +func size_slice_string(p *Properties, base structPointer) (n int) { + ss := *structPointer_StringSlice(base, p.field) + l := len(ss) + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + n += sizeStringBytes(ss[i]) + } + return +} + +// Encode a slice of message structs ([]*struct). +func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error { + var state errorState + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + for i := 0; i < l; i++ { + structp := s.Index(i) + if structPointer_IsNil(structp) { + return errRepeatedHasNil + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, err := m.Marshal() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + continue + } + + o.buf = append(o.buf, p.tagcode...) + err := o.enc_len_struct(p.sprop, structp, &state) + if err != nil && !state.shouldContinue(err, nil) { + if err == ErrNil { + return errRepeatedHasNil + } + return err + } + } + return state.err +} + +func size_slice_struct_message(p *Properties, base structPointer) (n int) { + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + structp := s.Index(i) + if structPointer_IsNil(structp) { + return // return the size up to this point + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, _ := m.Marshal() + n += sizeRawBytes(data) + continue + } + + n0 := size_struct(p.sprop, structp) + n1 := sizeVarint(uint64(n0)) // size of encoded length + n += n0 + n1 + } + return +} + +// Encode a slice of group structs ([]*struct). +func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error { + var state errorState + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + for i := 0; i < l; i++ { + b := s.Index(i) + if structPointer_IsNil(b) { + return errRepeatedHasNil + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) + + err := o.enc_struct(p.sprop, b) + + if err != nil && !state.shouldContinue(err, nil) { + if err == ErrNil { + return errRepeatedHasNil + } + return err + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) + } + return state.err +} + +func size_slice_struct_group(p *Properties, base structPointer) (n int) { + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup)) + n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup)) + for i := 0; i < l; i++ { + b := s.Index(i) + if structPointer_IsNil(b) { + return // return size up to this point + } + + n += size_struct(p.sprop, b) + } + return +} + +// Encode an extension map. +func (o *Buffer) enc_map(p *Properties, base structPointer) error { + exts := structPointer_ExtMap(base, p.field) + if err := encodeExtensionsMap(*exts); err != nil { + return err + } + + return o.enc_map_body(*exts) +} + +func (o *Buffer) enc_exts(p *Properties, base structPointer) error { + exts := structPointer_Extensions(base, p.field) + + v, mu := exts.extensionsRead() + if v == nil { + return nil + } + + mu.Lock() + defer mu.Unlock() + if err := encodeExtensionsMap(v); err != nil { + return err + } + + return o.enc_map_body(v) +} + +func (o *Buffer) enc_map_body(v map[int32]Extension) error { + // Fast-path for common cases: zero or one extensions. + if len(v) <= 1 { + for _, e := range v { + o.buf = append(o.buf, e.enc...) + } + return nil + } + + // Sort keys to provide a deterministic encoding. + keys := make([]int, 0, len(v)) + for k := range v { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + o.buf = append(o.buf, v[int32(k)].enc...) + } + return nil +} + +func size_map(p *Properties, base structPointer) int { + v := structPointer_ExtMap(base, p.field) + return extensionsMapSize(*v) +} + +func size_exts(p *Properties, base structPointer) int { + v := structPointer_Extensions(base, p.field) + return extensionsSize(v) +} + +// Encode a map field. +func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { + var state errorState // XXX: or do we need to plumb this through? + + /* + A map defined as + map<key_type, value_type> map_field = N; + is encoded in the same way as + message MapFieldEntry { + key_type key = 1; + value_type value = 2; + } + repeated MapFieldEntry map_field = N; + */ + + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V + if v.Len() == 0 { + return nil + } + + keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) + + enc := func() error { + if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { + return err + } + if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil { + return err + } + return nil + } + + // Don't sort map keys. It is not required by the spec, and C++ doesn't do it. + for _, key := range v.MapKeys() { + val := v.MapIndex(key) + + keycopy.Set(key) + valcopy.Set(val) + + o.buf = append(o.buf, p.tagcode...) + if err := o.enc_len_thing(enc, &state); err != nil { + return err + } + } + return nil +} + +func size_new_map(p *Properties, base structPointer) int { + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V + + keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) + + n := 0 + for _, key := range v.MapKeys() { + val := v.MapIndex(key) + keycopy.Set(key) + valcopy.Set(val) + + // Tag codes for key and val are the responsibility of the sub-sizer. + keysize := p.mkeyprop.size(p.mkeyprop, keybase) + valsize := p.mvalprop.size(p.mvalprop, valbase) + entry := keysize + valsize + // Add on tag code and length of map entry itself. + n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry + } + return n +} + +// mapEncodeScratch returns a new reflect.Value matching the map's value type, +// and a structPointer suitable for passing to an encoder or sizer. +func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) { + // Prepare addressable doubly-indirect placeholders for the key and value types. + // This is needed because the element-type encoders expect **T, but the map iteration produces T. + + keycopy = reflect.New(mapType.Key()).Elem() // addressable K + keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K + keyptr.Set(keycopy.Addr()) // + keybase = toStructPointer(keyptr.Addr()) // **K + + // Value types are more varied and require special handling. + switch mapType.Elem().Kind() { + case reflect.Slice: + // []byte + var dummy []byte + valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte + valbase = toStructPointer(valcopy.Addr()) + case reflect.Ptr: + // message; the generated field type is map[K]*Msg (so V is *Msg), + // so we only need one level of indirection. + valcopy = reflect.New(mapType.Elem()).Elem() // addressable V + valbase = toStructPointer(valcopy.Addr()) + default: + // everything else + valcopy = reflect.New(mapType.Elem()).Elem() // addressable V + valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V + valptr.Set(valcopy.Addr()) // + valbase = toStructPointer(valptr.Addr()) // **V + } + return +} + +// Encode a struct. +func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { + var state errorState + // Encode fields in tag order so that decoders may use optimizations + // that depend on the ordering. + // https://developers.google.com/protocol-buffers/docs/encoding#order + for _, i := range prop.order { + p := prop.Prop[i] + if p.enc != nil { + err := p.enc(o, p, base) + if err != nil { + if err == ErrNil { + if p.Required && state.err == nil { + state.err = &RequiredNotSetError{p.Name} + } + } else if err == errRepeatedHasNil { + // Give more context to nil values in repeated fields. + return errors.New("repeated field " + p.OrigName + " has nil element") + } else if !state.shouldContinue(err, p) { + return err + } + } + if len(o.buf) > maxMarshalSize { + return ErrTooLarge + } + } + } + + // Do oneof fields. + if prop.oneofMarshaler != nil { + m := structPointer_Interface(base, prop.stype).(Message) + if err := prop.oneofMarshaler(m, o); err == ErrNil { + return errOneofHasNil + } else if err != nil { + return err + } + } + + // Add unrecognized fields at the end. + if prop.unrecField.IsValid() { + v := *structPointer_Bytes(base, prop.unrecField) + if len(o.buf)+len(v) > maxMarshalSize { + return ErrTooLarge + } + if len(v) > 0 { + o.buf = append(o.buf, v...) + } + } + + return state.err +} + +func size_struct(prop *StructProperties, base structPointer) (n int) { + for _, i := range prop.order { + p := prop.Prop[i] + if p.size != nil { + n += p.size(p, base) + } + } + + // Add unrecognized fields at the end. + if prop.unrecField.IsValid() { + v := *structPointer_Bytes(base, prop.unrecField) + n += len(v) + } + + // Factor in any oneof fields. + if prop.oneofSizer != nil { + m := structPointer_Interface(base, prop.stype).(Message) + n += prop.oneofSizer(m) + } + + return +} + +var zeroes [20]byte // longer than any conceivable sizeVarint + +// Encode a struct, preceded by its encoded length (as a varint). +func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error { + return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state) +} + +// Encode something, preceded by its encoded length (as a varint). +func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error { + iLen := len(o.buf) + o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length + iMsg := len(o.buf) + err := enc() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + lMsg := len(o.buf) - iMsg + lLen := sizeVarint(uint64(lMsg)) + switch x := lLen - (iMsg - iLen); { + case x > 0: // actual length is x bytes larger than the space we reserved + // Move msg x bytes right. + o.buf = append(o.buf, zeroes[:x]...) + copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) + case x < 0: // actual length is x bytes smaller than the space we reserved + // Move msg x bytes left. + copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) + o.buf = o.buf[:len(o.buf)+x] // x is negative + } + // Encode the length in the reserved space. + o.buf = o.buf[:iLen] + o.EncodeVarint(uint64(lMsg)) + o.buf = o.buf[:len(o.buf)+lMsg] + return state.err +} + +// errorState maintains the first error that occurs and updates that error +// with additional context. +type errorState struct { + err error +} + +// shouldContinue reports whether encoding should continue upon encountering the +// given error. If the error is RequiredNotSetError, shouldContinue returns true +// and, if this is the first appearance of that error, remembers it for future +// reporting. +// +// If prop is not nil, it may update any error with additional context about the +// field with the error. +func (s *errorState) shouldContinue(err error, prop *Properties) bool { + // Ignore unset required fields. + reqNotSet, ok := err.(*RequiredNotSetError) + if !ok { + return false + } + if s.err == nil { + if prop != nil { + err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field} + } + s.err = err + } + return true +} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go index d4db5a1..2ed1cf5 100644 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ b/vendor/github.com/golang/protobuf/proto/equal.go @@ -109,6 +109,15 @@ func equalStruct(v1, v2 reflect.Value) bool { // set/unset mismatch return false } + b1, ok := f1.Interface().(raw) + if ok { + b2 := f2.Interface().(raw) + // RawMessage + if !bytes.Equal(b1.Bytes(), b2.Bytes()) { + return false + } + continue + } f1, f2 = f1.Elem(), f2.Elem() } if !equalAny(f1, f2, sprop.Prop[i]) { @@ -137,7 +146,11 @@ func equalStruct(v1, v2 reflect.Value) bool { u1 := uf.Bytes() u2 := v2.FieldByName("XXX_unrecognized").Bytes() - return bytes.Equal(u1, u2) + if !bytes.Equal(u1, u2) { + return false + } + + return true } // v1 and v2 are known to have the same type. @@ -248,15 +261,6 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { m1, m2 := e1.value, e2.value - if m1 == nil && m2 == nil { - // Both have only encoded form. - if bytes.Equal(e1.enc, e2.enc) { - continue - } - // The bytes are different, but the extensions might still be - // equal. We need to decode them to compare. - } - if m1 != nil && m2 != nil { // Both are unencoded. if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { @@ -272,12 +276,8 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { desc = m[extNum] } if desc == nil { - // If both have only encoded form and the bytes are the same, - // it is handled above. We get here when the bytes are different. - // We don't know how to decode it, so just compare them as byte - // slices. log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - return false + continue } var err error if m1 == nil { diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go index 816a3b9..eaad218 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -38,7 +38,6 @@ package proto import ( "errors" "fmt" - "io" "reflect" "strconv" "sync" @@ -92,29 +91,14 @@ func (n notLocker) Unlock() {} // extendable returns the extendableProto interface for the given generated proto message. // If the proto message has the old extension format, it returns a wrapper that implements // the extendableProto interface. -func extendable(p interface{}) (extendableProto, error) { - switch p := p.(type) { - case extendableProto: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return p, nil - case extendableProtoV1: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return extensionAdapter{p}, nil +func extendable(p interface{}) (extendableProto, bool) { + if ep, ok := p.(extendableProto); ok { + return ep, ok } - // Don't allocate a specific error containing %T: - // this is the hot path for Clone and MarshalText. - return nil, errNotExtendable -} - -var errNotExtendable = errors.New("proto: not an extendable proto.Message") - -func isNilPtr(x interface{}) bool { - v := reflect.ValueOf(x) - return v.Kind() == reflect.Ptr && v.IsNil() + if ep, ok := p.(extendableProtoV1); ok { + return extensionAdapter{ep}, ok + } + return nil, false } // XXX_InternalExtensions is an internal representation of proto extensions. @@ -159,6 +143,9 @@ func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Loc return e.p.extensionMap, &e.p.mu } +var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem() +var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem() + // ExtensionDesc represents an extension specification. // Used in generated code from the protocol compiler. type ExtensionDesc struct { @@ -192,8 +179,8 @@ type Extension struct { // SetRawExtension is for testing only. func SetRawExtension(base Message, id int32, b []byte) { - epb, err := extendable(base) - if err != nil { + epb, ok := extendable(base) + if !ok { return } extmap := epb.extensionsWrite() @@ -218,7 +205,7 @@ func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { pbi = ea.extendableProtoV1 } if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { - return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) + return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String()) } // Check the range. if !isExtensionField(pb, extension.Field) { @@ -263,11 +250,85 @@ func extensionProperties(ed *ExtensionDesc) *Properties { return prop } +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensions(e *XXX_InternalExtensions) error { + m, mu := e.extensionsRead() + if m == nil { + return nil // fast path + } + mu.Lock() + defer mu.Unlock() + return encodeExtensionsMap(m) +} + +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensionsMap(m map[int32]Extension) error { + for k, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + et := reflect.TypeOf(e.desc.ExtensionType) + props := extensionProperties(e.desc) + + p := NewBuffer(nil) + // If e.value has type T, the encoder expects a *struct{ X T }. + // Pass a *T with a zero field and hope it all works out. + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(e.value)) + if err := props.enc(p, props, toStructPointer(x)); err != nil { + return err + } + e.enc = p.buf + m[k] = e + } + return nil +} + +func extensionsSize(e *XXX_InternalExtensions) (n int) { + m, mu := e.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + defer mu.Unlock() + return extensionsMapSize(m) +} + +func extensionsMapSize(m map[int32]Extension) (n int) { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + et := reflect.TypeOf(e.desc.ExtensionType) + props := extensionProperties(e.desc) + + // If e.value has type T, the encoder expects a *struct{ X T }. + // Pass a *T with a zero field and hope it all works out. + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(e.value)) + n += props.size(props, toStructPointer(x)) + } + return +} + // HasExtension returns whether the given extension is present in pb. func HasExtension(pb Message, extension *ExtensionDesc) bool { // TODO: Check types, field numbers, etc.? - epb, err := extendable(pb) - if err != nil { + epb, ok := extendable(pb) + if !ok { return false } extmap, mu := epb.extensionsRead() @@ -275,15 +336,15 @@ func HasExtension(pb Message, extension *ExtensionDesc) bool { return false } mu.Lock() - _, ok := extmap[extension.Field] + _, ok = extmap[extension.Field] mu.Unlock() return ok } // ClearExtension removes the given extension from pb. func ClearExtension(pb Message, extension *ExtensionDesc) { - epb, err := extendable(pb) - if err != nil { + epb, ok := extendable(pb) + if !ok { return } // TODO: Check types, field numbers, etc.? @@ -291,26 +352,16 @@ func ClearExtension(pb Message, extension *ExtensionDesc) { delete(extmap, extension.Field) } -// GetExtension retrieves a proto2 extended field from pb. -// -// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), -// then GetExtension parses the encoded field and returns a Go value of the specified type. -// If the field is not present, then the default value is returned (if one is specified), -// otherwise ErrMissingExtension is reported. -// -// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), -// then GetExtension returns the raw encoded bytes of the field extension. +// GetExtension parses and returns the given extension of pb. +// If the extension is not present and has no default value it returns ErrMissingExtension. func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err + epb, ok := extendable(pb) + if !ok { + return nil, errors.New("proto: not an extendable proto") } - if extension.ExtendedType != nil { - // can only check type if this is a complete descriptor - if err := checkExtensionTypes(epb, extension); err != nil { - return nil, err - } + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err } emap, mu := epb.extensionsRead() @@ -337,11 +388,6 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { return e.value, nil } - if extension.ExtensionType == nil { - // incomplete descriptor - return e.enc, nil - } - v, err := decodeExtension(e.enc, extension) if err != nil { return nil, err @@ -359,11 +405,6 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { // defaultExtensionValue returns the default value for extension. // If no default for an extension is defined ErrMissingExtension is returned. func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { - if extension.ExtensionType == nil { - // incomplete descriptor, so no default - return nil, ErrMissingExtension - } - t := reflect.TypeOf(extension.ExtensionType) props := extensionProperties(extension) @@ -398,28 +439,31 @@ func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { // decodeExtension decodes an extension encoded in b. func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { + o := NewBuffer(b) + t := reflect.TypeOf(extension.ExtensionType) - unmarshal := typeUnmarshaler(t, extension.Tag) + + props := extensionProperties(extension) // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate space to store the pointer/slice. + // Allocate a "field" to store the pointer/slice itself; the + // pointer/slice will be stored here. We pass + // the address of this field to props.dec. + // This passes a zero field and a *t and lets props.dec + // interpret it as a *struct{ x t }. value := reflect.New(t).Elem() - var err error for { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF + // Discard wire type and field number varint. It isn't needed. + if _, err := o.DecodeVarint(); err != nil { + return nil, err } - b = b[n:] - wire := int(x) & 7 - b, err = unmarshal(b, valToPointer(value.Addr()), wire) - if err != nil { + if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil { return nil, err } - if len(b) == 0 { + if o.index >= len(o.buf) { break } } @@ -429,9 +473,9 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { // GetExtensions returns a slice of the extensions present in pb that are also listed in es. // The returned slice has the same length as es; missing extensions will appear as nil elements. func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, err := extendable(pb) - if err != nil { - return nil, err + epb, ok := extendable(pb) + if !ok { + return nil, errors.New("proto: not an extendable proto") } extensions = make([]interface{}, len(es)) for i, e := range es { @@ -450,9 +494,9 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e // For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing // just the Field field, which defines the extension's field number. func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err + epb, ok := extendable(pb) + if !ok { + return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb) } registeredExtensions := RegisteredExtensions(pb) @@ -479,9 +523,9 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { // SetExtension sets the specified extension of pb to the specified value. func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { - epb, err := extendable(pb) - if err != nil { - return err + epb, ok := extendable(pb) + if !ok { + return errors.New("proto: not an extendable proto") } if err := checkExtensionTypes(epb, extension); err != nil { return err @@ -506,8 +550,8 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error // ClearAllExtensions clears all extensions from pb. func ClearAllExtensions(pb Message) { - epb, err := extendable(pb) - if err != nil { + epb, ok := extendable(pb) + if !ok { return } m := epb.extensionsWrite() diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index 0e2191b..1c22550 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -265,7 +265,6 @@ package proto import ( "encoding/json" - "errors" "fmt" "log" "reflect" @@ -274,8 +273,6 @@ import ( "sync" ) -var errInvalidUTF8 = errors.New("proto: invalid UTF-8 string") - // Message is implemented by generated protocol buffer messages. type Message interface { Reset() @@ -312,7 +309,16 @@ type Buffer struct { buf []byte // encode/decode byte stream index int // read point - deterministic bool + // pools of basic types to amortize allocation. + bools []bool + uint32s []uint32 + uint64s []uint64 + + // extra pools, only used with pointer_reflect.go + int32s []int32 + int64s []int64 + float32s []float32 + float64s []float64 } // NewBuffer allocates a new Buffer and initializes its internal data to @@ -337,30 +343,6 @@ func (p *Buffer) SetBuf(s []byte) { // Bytes returns the contents of the Buffer. func (p *Buffer) Bytes() []byte { return p.buf } -// SetDeterministic sets whether to use deterministic serialization. -// -// Deterministic serialization guarantees that for a given binary, equal -// messages will always be serialized to the same bytes. This implies: -// -// - Repeated serialization of a message will return the same bytes. -// - Different processes of the same binary (which may be executing on -// different machines) will serialize equal messages to the same bytes. -// -// Note that the deterministic serialization is NOT canonical across -// languages. It is not guaranteed to remain stable over time. It is unstable -// across different builds with schema changes due to unknown fields. -// Users who need canonical serialization (e.g., persistent storage in a -// canonical form, fingerprinting, etc.) should define their own -// canonicalization specification and implement their own serializer rather -// than relying on this API. -// -// If deterministic serialization is requested, map entries will be sorted -// by keys in lexographical order. This is an implementation detail and -// subject to change. -func (p *Buffer) SetDeterministic(deterministic bool) { - p.deterministic = deterministic -} - /* * Helper routines for simplifying the creation of optional fields of basic type. */ @@ -849,12 +831,22 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes return sf, false, nil } -// mapKeys returns a sort.Interface to be used for sorting the map keys. // Map fields may have key types of non-float scalars, strings and enums. +// The easiest way to sort them in some deterministic order is to use fmt. +// If this turns out to be inefficient we can always consider other options, +// such as doing a Schwartzian transform. + func mapKeys(vs []reflect.Value) sort.Interface { - s := mapKeySorter{vs: vs} + s := mapKeySorter{ + vs: vs, + // default Less function: textual comparison + less: func(a, b reflect.Value) bool { + return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface()) + }, + } - // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps; + // numeric keys are sorted numerically. if len(vs) == 0 { return s } @@ -863,12 +855,6 @@ func mapKeys(vs []reflect.Value) sort.Interface { s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } case reflect.Uint32, reflect.Uint64: s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } - case reflect.Bool: - s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true - case reflect.String: - s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } - default: - panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) } return s @@ -909,13 +895,3 @@ const ProtoPackageIsVersion2 = true // ProtoPackageIsVersion1 is referenced from generated protocol buffer files // to assert that that code is compatible with this version of the proto package. const ProtoPackageIsVersion1 = true - -// InternalMessageInfo is a type used internally by generated .pb.go files. -// This type is not intended to be used by non-generated code. -// This type is not subject to any compatibility guarantee. -type InternalMessageInfo struct { - marshal *marshalInfo - unmarshal *unmarshalInfo - merge *mergeInfo - discard *discardInfo -} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go index 3b6ca41..fd982de 100644 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ b/vendor/github.com/golang/protobuf/proto/message_set.go @@ -42,7 +42,6 @@ import ( "fmt" "reflect" "sort" - "sync" ) // errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. @@ -95,7 +94,10 @@ func (ms *messageSet) find(pb Message) *_MessageSet_Item { } func (ms *messageSet) Has(pb Message) bool { - return ms.find(pb) != nil + if ms.find(pb) != nil { + return true + } + return false } func (ms *messageSet) Unmarshal(pb Message) error { @@ -148,42 +150,46 @@ func skipVarint(buf []byte) []byte { // MarshalMessageSet encodes the extension map represented by m in the message set wire format. // It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. func MarshalMessageSet(exts interface{}) ([]byte, error) { - return marshalMessageSet(exts, false) -} - -// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. -func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { + var m map[int32]Extension switch exts := exts.(type) { case *XXX_InternalExtensions: - var u marshalInfo - siz := u.sizeMessageSet(exts) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, exts, deterministic) - + if err := encodeExtensions(exts); err != nil { + return nil, err + } + m, _ = exts.extensionsRead() case map[int32]Extension: - // This is an old-style extension map. - // Wrap it in a new-style XXX_InternalExtensions. - ie := XXX_InternalExtensions{ - p: &struct { - mu sync.Mutex - extensionMap map[int32]Extension - }{ - extensionMap: exts, - }, + if err := encodeExtensionsMap(exts); err != nil { + return nil, err } - - var u marshalInfo - siz := u.sizeMessageSet(&ie) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, &ie, deterministic) - + m = exts default: return nil, errors.New("proto: not an extension map") } + + // Sort extension IDs to provide a deterministic encoding. + // See also enc_map in encode.go. + ids := make([]int, 0, len(m)) + for id := range m { + ids = append(ids, int(id)) + } + sort.Ints(ids) + + ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))} + for _, id := range ids { + e := m[int32(id)] + // Remove the wire type and field number varint, as well as the length varint. + msg := skipVarint(skipVarint(e.enc)) + + ms.Item = append(ms.Item, &_MessageSet_Item{ + TypeId: Int32(int32(id)), + Message: msg, + }) + } + return Marshal(ms) } // UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. -// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. +// It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. func UnmarshalMessageSet(buf []byte, exts interface{}) error { var m map[int32]Extension switch exts := exts.(type) { @@ -229,15 +235,7 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { var m map[int32]Extension switch exts := exts.(type) { case *XXX_InternalExtensions: - var mu sync.Locker - m, mu = exts.extensionsRead() - if m != nil { - // Keep the extensions map locked until we're done marshaling to prevent - // races between marshaling and unmarshaling the lazily-{en,de}coded - // values. - mu.Lock() - defer mu.Unlock() - } + m, _ = exts.extensionsRead() case map[int32]Extension: m = exts default: @@ -255,16 +253,15 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { for i, id := range ids { ext := m[id] + if i > 0 { + b.WriteByte(',') + } + msd, ok := messageSetMap[id] if !ok { // Unknown type; we can't render it, so skip it. continue } - - if i > 0 && b.Len() > 1 { - b.WriteByte(',') - } - fmt.Fprintf(&b, `"[%s]":`, msd.name) x := ext.value diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go index b6cad90..fb512e2 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build purego appengine js +// +build appengine js // This file contains an implementation of proto field accesses using package reflect. // It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can @@ -38,13 +38,32 @@ package proto import ( + "math" "reflect" - "sync" ) -const unsafeAllowed = false +// A structPointer is a pointer to a struct. +type structPointer struct { + v reflect.Value +} + +// toStructPointer returns a structPointer equivalent to the given reflect value. +// The reflect value must itself be a pointer to a struct. +func toStructPointer(v reflect.Value) structPointer { + return structPointer{v} +} + +// IsNil reports whether p is nil. +func structPointer_IsNil(p structPointer) bool { + return p.v.IsNil() +} -// A field identifies a field in a struct, accessible from a pointer. +// Interface returns the struct pointer as an interface value. +func structPointer_Interface(p structPointer, _ reflect.Type) interface{} { + return p.v.Interface() +} + +// A field identifies a field in a struct, accessible from a structPointer. // In this implementation, a field is identified by the sequence of field indices // passed to reflect's FieldByIndex. type field []int @@ -57,301 +76,409 @@ func toField(f *reflect.StructField) field { // invalidField is an invalid field identifier. var invalidField = field(nil) -// zeroField is a noop when calling pointer.offset. -var zeroField = field([]int{}) - // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { return f != nil } -// The pointer type is for the table-driven decoder. -// The implementation here uses a reflect.Value of pointer type to -// create a generic pointer. In pointer_unsafe.go we use unsafe -// instead of reflect to implement the same (but faster) interface. -type pointer struct { - v reflect.Value -} +// field returns the given field in the struct as a reflect value. +func structPointer_field(p structPointer, f field) reflect.Value { + // Special case: an extension map entry with a value of type T + // passes a *T to the struct-handling code with a zero field, + // expecting that it will be treated as equivalent to *struct{ X T }, + // which has the same memory layout. We have to handle that case + // specially, because reflect will panic if we call FieldByIndex on a + // non-struct. + if f == nil { + return p.v.Elem() + } -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - return pointer{v: reflect.ValueOf(*i)} + return p.v.Elem().FieldByIndex(f) } -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - v := reflect.ValueOf(*i) - u := reflect.New(v.Type()) - u.Elem().Set(v) - return pointer{v: u} +// ifield returns the given field in the struct as an interface value. +func structPointer_ifield(p structPointer, f field) interface{} { + return structPointer_field(p, f).Addr().Interface() } -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{v: v} +// Bytes returns the address of a []byte field in the struct. +func structPointer_Bytes(p structPointer, f field) *[]byte { + return structPointer_ifield(p, f).(*[]byte) } -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} +// BytesSlice returns the address of a [][]byte field in the struct. +func structPointer_BytesSlice(p structPointer, f field) *[][]byte { + return structPointer_ifield(p, f).(*[][]byte) } -func (p pointer) isNil() bool { - return p.v.IsNil() +// Bool returns the address of a *bool field in the struct. +func structPointer_Bool(p structPointer, f field) **bool { + return structPointer_ifield(p, f).(**bool) } -// grow updates the slice s in place to make it one element longer. -// s must be addressable. -// Returns the (addressable) new element. -func grow(s reflect.Value) reflect.Value { - n, m := s.Len(), s.Cap() - if n < m { - s.SetLen(n + 1) - } else { - s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) - } - return s.Index(n) +// BoolVal returns the address of a bool field in the struct. +func structPointer_BoolVal(p structPointer, f field) *bool { + return structPointer_ifield(p, f).(*bool) } -func (p pointer) toInt64() *int64 { - return p.v.Interface().(*int64) +// BoolSlice returns the address of a []bool field in the struct. +func structPointer_BoolSlice(p structPointer, f field) *[]bool { + return structPointer_ifield(p, f).(*[]bool) } -func (p pointer) toInt64Ptr() **int64 { - return p.v.Interface().(**int64) -} -func (p pointer) toInt64Slice() *[]int64 { - return p.v.Interface().(*[]int64) -} - -var int32ptr = reflect.TypeOf((*int32)(nil)) -func (p pointer) toInt32() *int32 { - return p.v.Convert(int32ptr).Interface().(*int32) +// String returns the address of a *string field in the struct. +func structPointer_String(p structPointer, f field) **string { + return structPointer_ifield(p, f).(**string) } -// The toInt32Ptr/Slice methods don't work because of enums. -// Instead, we must use set/get methods for the int32ptr/slice case. -/* - func (p pointer) toInt32Ptr() **int32 { - return p.v.Interface().(**int32) +// StringVal returns the address of a string field in the struct. +func structPointer_StringVal(p structPointer, f field) *string { + return structPointer_ifield(p, f).(*string) } - func (p pointer) toInt32Slice() *[]int32 { - return p.v.Interface().(*[]int32) -} -*/ -func (p pointer) getInt32Ptr() *int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().(*int32) - } - // an enum - return p.v.Elem().Convert(int32PtrType).Interface().(*int32) -} -func (p pointer) setInt32Ptr(v int32) { - // Allocate value in a *int32. Possibly convert that to a *enum. - // Then assign it to a **int32 or **enum. - // Note: we can convert *int32 to *enum, but we can't convert - // **int32 to **enum! - p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) -} - -// getInt32Slice copies []int32 from p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getInt32Slice() []int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().([]int32) - } - // an enum - // Allocate a []int32, then assign []enum's values into it. - // Note: we can't convert []enum to []int32. - slice := p.v.Elem() - s := make([]int32, slice.Len()) - for i := 0; i < slice.Len(); i++ { - s[i] = int32(slice.Index(i).Int()) - } - return s + +// StringSlice returns the address of a []string field in the struct. +func structPointer_StringSlice(p structPointer, f field) *[]string { + return structPointer_ifield(p, f).(*[]string) } -// setInt32Slice copies []int32 into p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setInt32Slice(v []int32) { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - p.v.Elem().Set(reflect.ValueOf(v)) - return - } - // an enum - // Allocate a []enum, then assign []int32's values into it. - // Note: we can't convert []enum to []int32. - slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) - for i, x := range v { - slice.Index(i).SetInt(int64(x)) - } - p.v.Elem().Set(slice) +// Extensions returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return structPointer_ifield(p, f).(*XXX_InternalExtensions) } -func (p pointer) appendInt32Slice(v int32) { - grow(p.v.Elem()).SetInt(int64(v)) + +// ExtMap returns the address of an extension map field in the struct. +func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { + return structPointer_ifield(p, f).(*map[int32]Extension) } -func (p pointer) toUint64() *uint64 { - return p.v.Interface().(*uint64) +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { + return structPointer_field(p, f).Addr() } -func (p pointer) toUint64Ptr() **uint64 { - return p.v.Interface().(**uint64) + +// SetStructPointer writes a *struct field in the struct. +func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { + structPointer_field(p, f).Set(q.v) } -func (p pointer) toUint64Slice() *[]uint64 { - return p.v.Interface().(*[]uint64) + +// GetStructPointer reads a *struct field in the struct. +func structPointer_GetStructPointer(p structPointer, f field) structPointer { + return structPointer{structPointer_field(p, f)} } -func (p pointer) toUint32() *uint32 { - return p.v.Interface().(*uint32) + +// StructPointerSlice the address of a []*struct field in the struct. +func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice { + return structPointerSlice{structPointer_field(p, f)} } -func (p pointer) toUint32Ptr() **uint32 { - return p.v.Interface().(**uint32) + +// A structPointerSlice represents the address of a slice of pointers to structs +// (themselves messages or groups). That is, v.Type() is *[]*struct{...}. +type structPointerSlice struct { + v reflect.Value } -func (p pointer) toUint32Slice() *[]uint32 { - return p.v.Interface().(*[]uint32) + +func (p structPointerSlice) Len() int { return p.v.Len() } +func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} } +func (p structPointerSlice) Append(q structPointer) { + p.v.Set(reflect.Append(p.v, q.v)) } -func (p pointer) toBool() *bool { - return p.v.Interface().(*bool) + +var ( + int32Type = reflect.TypeOf(int32(0)) + uint32Type = reflect.TypeOf(uint32(0)) + float32Type = reflect.TypeOf(float32(0)) + int64Type = reflect.TypeOf(int64(0)) + uint64Type = reflect.TypeOf(uint64(0)) + float64Type = reflect.TypeOf(float64(0)) +) + +// A word32 represents a field of type *int32, *uint32, *float32, or *enum. +// That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable. +type word32 struct { + v reflect.Value } -func (p pointer) toBoolPtr() **bool { - return p.v.Interface().(**bool) + +// IsNil reports whether p is nil. +func word32_IsNil(p word32) bool { + return p.v.IsNil() } -func (p pointer) toBoolSlice() *[]bool { - return p.v.Interface().(*[]bool) + +// Set sets p to point at a newly allocated word with bits set to x. +func word32_Set(p word32, o *Buffer, x uint32) { + t := p.v.Type().Elem() + switch t { + case int32Type: + if len(o.int32s) == 0 { + o.int32s = make([]int32, uint32PoolSize) + } + o.int32s[0] = int32(x) + p.v.Set(reflect.ValueOf(&o.int32s[0])) + o.int32s = o.int32s[1:] + return + case uint32Type: + if len(o.uint32s) == 0 { + o.uint32s = make([]uint32, uint32PoolSize) + } + o.uint32s[0] = x + p.v.Set(reflect.ValueOf(&o.uint32s[0])) + o.uint32s = o.uint32s[1:] + return + case float32Type: + if len(o.float32s) == 0 { + o.float32s = make([]float32, uint32PoolSize) + } + o.float32s[0] = math.Float32frombits(x) + p.v.Set(reflect.ValueOf(&o.float32s[0])) + o.float32s = o.float32s[1:] + return + } + + // must be enum + p.v.Set(reflect.New(t)) + p.v.Elem().SetInt(int64(int32(x))) } -func (p pointer) toFloat64() *float64 { - return p.v.Interface().(*float64) + +// Get gets the bits pointed at by p, as a uint32. +func word32_Get(p word32) uint32 { + elem := p.v.Elem() + switch elem.Kind() { + case reflect.Int32: + return uint32(elem.Int()) + case reflect.Uint32: + return uint32(elem.Uint()) + case reflect.Float32: + return math.Float32bits(float32(elem.Float())) + } + panic("unreachable") } -func (p pointer) toFloat64Ptr() **float64 { - return p.v.Interface().(**float64) + +// Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct. +func structPointer_Word32(p structPointer, f field) word32 { + return word32{structPointer_field(p, f)} } -func (p pointer) toFloat64Slice() *[]float64 { - return p.v.Interface().(*[]float64) + +// A word32Val represents a field of type int32, uint32, float32, or enum. +// That is, v.Type() is int32, uint32, float32, or enum and v is assignable. +type word32Val struct { + v reflect.Value } -func (p pointer) toFloat32() *float32 { - return p.v.Interface().(*float32) + +// Set sets *p to x. +func word32Val_Set(p word32Val, x uint32) { + switch p.v.Type() { + case int32Type: + p.v.SetInt(int64(x)) + return + case uint32Type: + p.v.SetUint(uint64(x)) + return + case float32Type: + p.v.SetFloat(float64(math.Float32frombits(x))) + return + } + + // must be enum + p.v.SetInt(int64(int32(x))) } -func (p pointer) toFloat32Ptr() **float32 { - return p.v.Interface().(**float32) + +// Get gets the bits pointed at by p, as a uint32. +func word32Val_Get(p word32Val) uint32 { + elem := p.v + switch elem.Kind() { + case reflect.Int32: + return uint32(elem.Int()) + case reflect.Uint32: + return uint32(elem.Uint()) + case reflect.Float32: + return math.Float32bits(float32(elem.Float())) + } + panic("unreachable") } -func (p pointer) toFloat32Slice() *[]float32 { - return p.v.Interface().(*[]float32) + +// Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct. +func structPointer_Word32Val(p structPointer, f field) word32Val { + return word32Val{structPointer_field(p, f)} } -func (p pointer) toString() *string { - return p.v.Interface().(*string) + +// A word32Slice is a slice of 32-bit values. +// That is, v.Type() is []int32, []uint32, []float32, or []enum. +type word32Slice struct { + v reflect.Value } -func (p pointer) toStringPtr() **string { - return p.v.Interface().(**string) + +func (p word32Slice) Append(x uint32) { + n, m := p.v.Len(), p.v.Cap() + if n < m { + p.v.SetLen(n + 1) + } else { + t := p.v.Type().Elem() + p.v.Set(reflect.Append(p.v, reflect.Zero(t))) + } + elem := p.v.Index(n) + switch elem.Kind() { + case reflect.Int32: + elem.SetInt(int64(int32(x))) + case reflect.Uint32: + elem.SetUint(uint64(x)) + case reflect.Float32: + elem.SetFloat(float64(math.Float32frombits(x))) + } } -func (p pointer) toStringSlice() *[]string { - return p.v.Interface().(*[]string) + +func (p word32Slice) Len() int { + return p.v.Len() } -func (p pointer) toBytes() *[]byte { - return p.v.Interface().(*[]byte) + +func (p word32Slice) Index(i int) uint32 { + elem := p.v.Index(i) + switch elem.Kind() { + case reflect.Int32: + return uint32(elem.Int()) + case reflect.Uint32: + return uint32(elem.Uint()) + case reflect.Float32: + return math.Float32bits(float32(elem.Float())) + } + panic("unreachable") } -func (p pointer) toBytesSlice() *[][]byte { - return p.v.Interface().(*[][]byte) + +// Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct. +func structPointer_Word32Slice(p structPointer, f field) word32Slice { + return word32Slice{structPointer_field(p, f)} } -func (p pointer) toExtensions() *XXX_InternalExtensions { - return p.v.Interface().(*XXX_InternalExtensions) + +// word64 is like word32 but for 64-bit values. +type word64 struct { + v reflect.Value } -func (p pointer) toOldExtensions() *map[int32]Extension { - return p.v.Interface().(*map[int32]Extension) + +func word64_Set(p word64, o *Buffer, x uint64) { + t := p.v.Type().Elem() + switch t { + case int64Type: + if len(o.int64s) == 0 { + o.int64s = make([]int64, uint64PoolSize) + } + o.int64s[0] = int64(x) + p.v.Set(reflect.ValueOf(&o.int64s[0])) + o.int64s = o.int64s[1:] + return + case uint64Type: + if len(o.uint64s) == 0 { + o.uint64s = make([]uint64, uint64PoolSize) + } + o.uint64s[0] = x + p.v.Set(reflect.ValueOf(&o.uint64s[0])) + o.uint64s = o.uint64s[1:] + return + case float64Type: + if len(o.float64s) == 0 { + o.float64s = make([]float64, uint64PoolSize) + } + o.float64s[0] = math.Float64frombits(x) + p.v.Set(reflect.ValueOf(&o.float64s[0])) + o.float64s = o.float64s[1:] + return + } + panic("unreachable") } -func (p pointer) getPointer() pointer { - return pointer{v: p.v.Elem()} + +func word64_IsNil(p word64) bool { + return p.v.IsNil() } -func (p pointer) setPointer(q pointer) { - p.v.Elem().Set(q.v) + +func word64_Get(p word64) uint64 { + elem := p.v.Elem() + switch elem.Kind() { + case reflect.Int64: + return uint64(elem.Int()) + case reflect.Uint64: + return elem.Uint() + case reflect.Float64: + return math.Float64bits(elem.Float()) + } + panic("unreachable") } -func (p pointer) appendPointer(q pointer) { - grow(p.v.Elem()).Set(q.v) + +func structPointer_Word64(p structPointer, f field) word64 { + return word64{structPointer_field(p, f)} } -// getPointerSlice copies []*T from p as a new []pointer. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getPointerSlice() []pointer { - if p.v.IsNil() { - return nil - } - n := p.v.Elem().Len() - s := make([]pointer, n) - for i := 0; i < n; i++ { - s[i] = pointer{v: p.v.Elem().Index(i)} - } - return s +// word64Val is like word32Val but for 64-bit values. +type word64Val struct { + v reflect.Value } -// setPointerSlice copies []pointer into p as a new []*T. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setPointerSlice(v []pointer) { - if v == nil { - p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) +func word64Val_Set(p word64Val, o *Buffer, x uint64) { + switch p.v.Type() { + case int64Type: + p.v.SetInt(int64(x)) + return + case uint64Type: + p.v.SetUint(x) + return + case float64Type: + p.v.SetFloat(math.Float64frombits(x)) return } - s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) - for _, p := range v { - s = reflect.Append(s, p.v) - } - p.v.Elem().Set(s) + panic("unreachable") } -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - if p.v.Elem().IsNil() { - return pointer{v: p.v.Elem()} +func word64Val_Get(p word64Val) uint64 { + elem := p.v + switch elem.Kind() { + case reflect.Int64: + return uint64(elem.Int()) + case reflect.Uint64: + return elem.Uint() + case reflect.Float64: + return math.Float64bits(elem.Float()) } - return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct + panic("unreachable") } -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - // TODO: check that p.v.Type().Elem() == t? - return p.v +func structPointer_Word64Val(p structPointer, f field) word64Val { + return word64Val{structPointer_field(p, f)} } -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p +type word64Slice struct { + v reflect.Value } -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v + +func (p word64Slice) Append(x uint64) { + n, m := p.v.Len(), p.v.Cap() + if n < m { + p.v.SetLen(n + 1) + } else { + t := p.v.Type().Elem() + p.v.Set(reflect.Append(p.v, reflect.Zero(t))) + } + elem := p.v.Index(n) + switch elem.Kind() { + case reflect.Int64: + elem.SetInt(int64(int64(x))) + case reflect.Uint64: + elem.SetUint(uint64(x)) + case reflect.Float64: + elem.SetFloat(float64(math.Float64frombits(x))) + } } -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p + +func (p word64Slice) Len() int { + return p.v.Len() } -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v + +func (p word64Slice) Index(i int) uint64 { + elem := p.v.Index(i) + switch elem.Kind() { + case reflect.Int64: + return uint64(elem.Int()) + case reflect.Uint64: + return uint64(elem.Uint()) + case reflect.Float64: + return math.Float64bits(float64(elem.Float())) + } + panic("unreachable") } -var atomicLock sync.Mutex +func structPointer_Word64Slice(p structPointer, f field) word64Slice { + return word64Slice{structPointer_field(p, f)} +} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go index d55a335..6b5567d 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !purego,!appengine,!js +// +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -37,13 +37,38 @@ package proto import ( "reflect" - "sync/atomic" "unsafe" ) -const unsafeAllowed = true +// NOTE: These type_Foo functions would more idiomatically be methods, +// but Go does not allow methods on pointer types, and we must preserve +// some pointer type for the garbage collector. We use these +// funcs with clunky names as our poor approximation to methods. +// +// An alternative would be +// type structPointer struct { p unsafe.Pointer } +// but that does not registerize as well. + +// A structPointer is a pointer to a struct. +type structPointer unsafe.Pointer + +// toStructPointer returns a structPointer equivalent to the given reflect value. +func toStructPointer(v reflect.Value) structPointer { + return structPointer(unsafe.Pointer(v.Pointer())) +} + +// IsNil reports whether p is nil. +func structPointer_IsNil(p structPointer) bool { + return p == nil +} + +// Interface returns the struct pointer, assumed to have element type t, +// as an interface value. +func structPointer_Interface(p structPointer, t reflect.Type) interface{} { + return reflect.NewAt(t, unsafe.Pointer(p)).Interface() +} -// A field identifies a field in a struct, accessible from a pointer. +// A field identifies a field in a struct, accessible from a structPointer. // In this implementation, a field is identified by its byte offset from the start of the struct. type field uintptr @@ -55,254 +80,191 @@ func toField(f *reflect.StructField) field { // invalidField is an invalid field identifier. const invalidField = ^field(0) -// zeroField is a noop when calling pointer.offset. -const zeroField = field(0) - // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { - return f != invalidField + return f != ^field(0) } -// The pointer type below is for the new table-driven encoder/decoder. -// The implementation here uses unsafe.Pointer to create a generic pointer. -// In pointer_reflect.go we use reflect instead of unsafe to implement -// the same (but slower) interface. -type pointer struct { - p unsafe.Pointer +// Bytes returns the address of a []byte field in the struct. +func structPointer_Bytes(p structPointer, f field) *[]byte { + return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// size of pointer -var ptrSize = unsafe.Sizeof(uintptr(0)) - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - // Super-tricky - read pointer out of data word of interface value. - // Saves ~25ns over the equivalent: - // return valToPointer(reflect.ValueOf(*i)) - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +// BytesSlice returns the address of a [][]byte field in the struct. +func structPointer_BytesSlice(p structPointer, f field) *[][]byte { + return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - // Super-tricky - read or get the address of data word of interface value. - if isptr { - // The interface is of pointer type, thus it is a direct interface. - // The data word is the pointer data itself. We take its address. - return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} - } - // The interface is not of pointer type. The data word is the pointer - // to the data. - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +// Bool returns the address of a *bool field in the struct. +func structPointer_Bool(p structPointer, f field) **bool { + return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{p: unsafe.Pointer(v.Pointer())} +// BoolVal returns the address of a bool field in the struct. +func structPointer_BoolVal(p structPointer, f field) *bool { + return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - // For safety, we should panic if !f.IsValid, however calling panic causes - // this to no longer be inlineable, which is a serious performance cost. - /* - if !f.IsValid() { - panic("invalid field") - } - */ - return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +// BoolSlice returns the address of a []bool field in the struct. +func structPointer_BoolSlice(p structPointer, f field) *[]bool { + return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -func (p pointer) isNil() bool { - return p.p == nil +// String returns the address of a *string field in the struct. +func structPointer_String(p structPointer, f field) **string { + return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -func (p pointer) toInt64() *int64 { - return (*int64)(p.p) -} -func (p pointer) toInt64Ptr() **int64 { - return (**int64)(p.p) -} -func (p pointer) toInt64Slice() *[]int64 { - return (*[]int64)(p.p) -} -func (p pointer) toInt32() *int32 { - return (*int32)(p.p) +// StringVal returns the address of a string field in the struct. +func structPointer_StringVal(p structPointer, f field) *string { + return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. -/* - func (p pointer) toInt32Ptr() **int32 { - return (**int32)(p.p) - } - func (p pointer) toInt32Slice() *[]int32 { - return (*[]int32)(p.p) - } -*/ -func (p pointer) getInt32Ptr() *int32 { - return *(**int32)(p.p) -} -func (p pointer) setInt32Ptr(v int32) { - *(**int32)(p.p) = &v +// StringSlice returns the address of a []string field in the struct. +func structPointer_StringSlice(p structPointer, f field) *[]string { + return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// getInt32Slice loads a []int32 from p. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getInt32Slice() []int32 { - return *(*[]int32)(p.p) +// ExtMap returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// setInt32Slice stores a []int32 to p. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setInt32Slice(v []int32) { - *(*[]int32)(p.p) = v +func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { + return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? -func (p pointer) appendInt32Slice(v int32) { - s := (*[]int32)(p.p) - *s = append(*s, v) +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { + return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f))) } -func (p pointer) toUint64() *uint64 { - return (*uint64)(p.p) -} -func (p pointer) toUint64Ptr() **uint64 { - return (**uint64)(p.p) -} -func (p pointer) toUint64Slice() *[]uint64 { - return (*[]uint64)(p.p) -} -func (p pointer) toUint32() *uint32 { - return (*uint32)(p.p) -} -func (p pointer) toUint32Ptr() **uint32 { - return (**uint32)(p.p) -} -func (p pointer) toUint32Slice() *[]uint32 { - return (*[]uint32)(p.p) -} -func (p pointer) toBool() *bool { - return (*bool)(p.p) -} -func (p pointer) toBoolPtr() **bool { - return (**bool)(p.p) -} -func (p pointer) toBoolSlice() *[]bool { - return (*[]bool)(p.p) -} -func (p pointer) toFloat64() *float64 { - return (*float64)(p.p) -} -func (p pointer) toFloat64Ptr() **float64 { - return (**float64)(p.p) -} -func (p pointer) toFloat64Slice() *[]float64 { - return (*[]float64)(p.p) -} -func (p pointer) toFloat32() *float32 { - return (*float32)(p.p) +// SetStructPointer writes a *struct field in the struct. +func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { + *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q } -func (p pointer) toFloat32Ptr() **float32 { - return (**float32)(p.p) -} -func (p pointer) toFloat32Slice() *[]float32 { - return (*[]float32)(p.p) -} -func (p pointer) toString() *string { - return (*string)(p.p) -} -func (p pointer) toStringPtr() **string { - return (**string)(p.p) -} -func (p pointer) toStringSlice() *[]string { - return (*[]string)(p.p) -} -func (p pointer) toBytes() *[]byte { - return (*[]byte)(p.p) -} -func (p pointer) toBytesSlice() *[][]byte { - return (*[][]byte)(p.p) + +// GetStructPointer reads a *struct field in the struct. +func structPointer_GetStructPointer(p structPointer, f field) structPointer { + return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -func (p pointer) toExtensions() *XXX_InternalExtensions { - return (*XXX_InternalExtensions)(p.p) + +// StructPointerSlice the address of a []*struct field in the struct. +func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice { + return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -func (p pointer) toOldExtensions() *map[int32]Extension { - return (*map[int32]Extension)(p.p) + +// A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups). +type structPointerSlice []structPointer + +func (v *structPointerSlice) Len() int { return len(*v) } +func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] } +func (v *structPointerSlice) Append(p structPointer) { *v = append(*v, p) } + +// A word32 is the address of a "pointer to 32-bit value" field. +type word32 **uint32 + +// IsNil reports whether *v is nil. +func word32_IsNil(p word32) bool { + return *p == nil } -// getPointerSlice loads []*T from p as a []pointer. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getPointerSlice() []pointer { - // Super-tricky - p should point to a []*T where T is a - // message type. We load it as []pointer. - return *(*[]pointer)(p.p) +// Set sets *v to point at a newly allocated word set to x. +func word32_Set(p word32, o *Buffer, x uint32) { + if len(o.uint32s) == 0 { + o.uint32s = make([]uint32, uint32PoolSize) + } + o.uint32s[0] = x + *p = &o.uint32s[0] + o.uint32s = o.uint32s[1:] } -// setPointerSlice stores []pointer into p as a []*T. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setPointerSlice(v []pointer) { - // Super-tricky - p should point to a []*T where T is a - // message type. We store it as []pointer. - *(*[]pointer)(p.p) = v +// Get gets the value pointed at by *v. +func word32_Get(p word32) uint32 { + return **p } -// getPointer loads the pointer at p and returns it. -func (p pointer) getPointer() pointer { - return pointer{p: *(*unsafe.Pointer)(p.p)} +// Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct. +func structPointer_Word32(p structPointer, f field) word32 { + return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } -// setPointer stores the pointer q at p. -func (p pointer) setPointer(q pointer) { - *(*unsafe.Pointer)(p.p) = q.p +// A word32Val is the address of a 32-bit value field. +type word32Val *uint32 + +// Set sets *p to x. +func word32Val_Set(p word32Val, x uint32) { + *p = x } -// append q to the slice pointed to by p. -func (p pointer) appendPointer(q pointer) { - s := (*[]unsafe.Pointer)(p.p) - *s = append(*s, q.p) +// Get gets the value pointed at by p. +func word32Val_Get(p word32Val) uint32 { + return *p } -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - // Super-tricky - read pointer out of data word of interface value. - return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} +// Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct. +func structPointer_Word32Val(p structPointer, f field) word32Val { + return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } -// asPointerTo returns a reflect.Value that is a pointer to an -// object of type t stored at p. -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - return reflect.NewAt(t, p.p) +// A word32Slice is a slice of 32-bit values. +type word32Slice []uint32 + +func (v *word32Slice) Append(x uint32) { *v = append(*v, x) } +func (v *word32Slice) Len() int { return len(*v) } +func (v *word32Slice) Index(i int) uint32 { return (*v)[i] } + +// Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct. +func structPointer_Word32Slice(p structPointer, f field) *word32Slice { + return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +// word64 is like word32 but for 64-bit values. +type word64 **uint64 + +func word64_Set(p word64, o *Buffer, x uint64) { + if len(o.uint64s) == 0 { + o.uint64s = make([]uint64, uint64PoolSize) + } + o.uint64s[0] = x + *p = &o.uint64s[0] + o.uint64s = o.uint64s[1:] } -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) + +func word64_IsNil(p word64) bool { + return *p == nil } -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) + +func word64_Get(p word64) uint64 { + return **p } -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) + +func structPointer_Word64(p structPointer, f field) word64 { + return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) + +// word64Val is like word32Val but for 64-bit values. +type word64Val *uint64 + +func word64Val_Set(p word64Val, o *Buffer, x uint64) { + *p = x } -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) + +func word64Val_Get(p word64Val) uint64 { + return *p } -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) + +func structPointer_Word64Val(p structPointer, f field) word64Val { + return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) + +// word64Slice is like word32Slice but for 64-bit values. +type word64Slice []uint64 + +func (v *word64Slice) Append(x uint64) { *v = append(*v, x) } +func (v *word64Slice) Len() int { return len(*v) } +func (v *word64Slice) Index(i int) uint64 { return (*v)[i] } + +func structPointer_Word64Slice(p structPointer, f field) *word64Slice { + return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index f710ada..ec2289c 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -58,6 +58,42 @@ const ( WireFixed32 = 5 ) +const startSize = 10 // initial slice/string sizes + +// Encoders are defined in encode.go +// An encoder outputs the full representation of a field, including its +// tag and encoder type. +type encoder func(p *Buffer, prop *Properties, base structPointer) error + +// A valueEncoder encodes a single integer in a particular encoding. +type valueEncoder func(o *Buffer, x uint64) error + +// Sizers are defined in encode.go +// A sizer returns the encoded size of a field, including its tag and encoder +// type. +type sizer func(prop *Properties, base structPointer) int + +// A valueSizer returns the encoded size of a single integer in a particular +// encoding. +type valueSizer func(x uint64) int + +// Decoders are defined in decode.go +// A decoder creates a value from its wire representation. +// Unrecognized subelements are saved in unrec. +type decoder func(p *Buffer, prop *Properties, base structPointer) error + +// A valueDecoder decodes a single integer in a particular encoding. +type valueDecoder func(o *Buffer) (x uint64, err error) + +// A oneofMarshaler does the marshaling for all oneof fields in a message. +type oneofMarshaler func(Message, *Buffer) error + +// A oneofUnmarshaler does the unmarshaling for a oneof field in a message. +type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error) + +// A oneofSizer does the sizing for all oneof fields in a message. +type oneofSizer func(Message) int + // tagMap is an optimization over map[int]int for typical protocol buffer // use-cases. Encoded protocol buffers are often in tag order with small tag // numbers. @@ -104,6 +140,13 @@ type StructProperties struct { decoderTags tagMap // map from proto tag to struct field number decoderOrigNames map[string]int // map from original name to struct field number order []int // list of struct field numbers in tag order + unrecField field // field id of the XXX_unrecognized []byte field + extendable bool // is this an extendable proto + + oneofMarshaler oneofMarshaler + oneofUnmarshaler oneofUnmarshaler + oneofSizer oneofSizer + stype reflect.Type // OneofTypes contains information about the oneof fields in this message. // It is keyed by the original name of a field. @@ -144,19 +187,36 @@ type Properties struct { Default string // default value HasDefault bool // whether an explicit default was provided - - stype reflect.Type // set for struct types only - sprop *StructProperties // set for struct types only + def_uint64 uint64 + + enc encoder + valEnc valueEncoder // set for bool and numeric types only + field field + tagcode []byte // encoding of EncodeVarint((Tag<<3)|WireType) + tagbuf [8]byte + stype reflect.Type // set for struct types only + sprop *StructProperties // set for struct types only + isMarshaler bool + isUnmarshaler bool mtype reflect.Type // set for map types only mkeyprop *Properties // set for map types only mvalprop *Properties // set for map types only + + size sizer + valSize valueSizer // set for bool and numeric types only + + dec decoder + valDec valueDecoder // set for bool and numeric types only + + // If this is a packable field, this will be the decoder for the packed version of the field. + packedDec decoder } // String formats the properties in the protobuf struct field tag style. func (p *Properties) String() string { s := p.Wire - s += "," + s = "," s += strconv.Itoa(p.Tag) if p.Required { s += ",req" @@ -202,14 +262,29 @@ func (p *Properties) Parse(s string) { switch p.Wire { case "varint": p.WireType = WireVarint + p.valEnc = (*Buffer).EncodeVarint + p.valDec = (*Buffer).DecodeVarint + p.valSize = sizeVarint case "fixed32": p.WireType = WireFixed32 + p.valEnc = (*Buffer).EncodeFixed32 + p.valDec = (*Buffer).DecodeFixed32 + p.valSize = sizeFixed32 case "fixed64": p.WireType = WireFixed64 + p.valEnc = (*Buffer).EncodeFixed64 + p.valDec = (*Buffer).DecodeFixed64 + p.valSize = sizeFixed64 case "zigzag32": p.WireType = WireVarint + p.valEnc = (*Buffer).EncodeZigzag32 + p.valDec = (*Buffer).DecodeZigzag32 + p.valSize = sizeZigzag32 case "zigzag64": p.WireType = WireVarint + p.valEnc = (*Buffer).EncodeZigzag64 + p.valDec = (*Buffer).DecodeZigzag64 + p.valSize = sizeZigzag64 case "bytes", "group": p.WireType = WireBytes // no numeric converter for non-numeric types @@ -224,7 +299,6 @@ func (p *Properties) Parse(s string) { return } -outer: for i := 2; i < len(fields); i++ { f := fields[i] switch { @@ -252,28 +326,229 @@ outer: if i+1 < len(fields) { // Commas aren't escaped, and def is always last. p.Default += "," + strings.Join(fields[i+1:], ",") - break outer + break } } } } +func logNoSliceEnc(t1, t2 reflect.Type) { + fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2) +} + var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() -// setFieldProps initializes the field properties for submessages and maps. -func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { +// Initialize the fields for encoding and decoding. +func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { + p.enc = nil + p.dec = nil + p.size = nil + switch t1 := typ; t1.Kind() { + default: + fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1) + + // proto3 scalar types + + case reflect.Bool: + p.enc = (*Buffer).enc_proto3_bool + p.dec = (*Buffer).dec_proto3_bool + p.size = size_proto3_bool + case reflect.Int32: + p.enc = (*Buffer).enc_proto3_int32 + p.dec = (*Buffer).dec_proto3_int32 + p.size = size_proto3_int32 + case reflect.Uint32: + p.enc = (*Buffer).enc_proto3_uint32 + p.dec = (*Buffer).dec_proto3_int32 // can reuse + p.size = size_proto3_uint32 + case reflect.Int64, reflect.Uint64: + p.enc = (*Buffer).enc_proto3_int64 + p.dec = (*Buffer).dec_proto3_int64 + p.size = size_proto3_int64 + case reflect.Float32: + p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits + p.dec = (*Buffer).dec_proto3_int32 + p.size = size_proto3_uint32 + case reflect.Float64: + p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits + p.dec = (*Buffer).dec_proto3_int64 + p.size = size_proto3_int64 + case reflect.String: + p.enc = (*Buffer).enc_proto3_string + p.dec = (*Buffer).dec_proto3_string + p.size = size_proto3_string + case reflect.Ptr: - if t1.Elem().Kind() == reflect.Struct { + switch t2 := t1.Elem(); t2.Kind() { + default: + fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2) + break + case reflect.Bool: + p.enc = (*Buffer).enc_bool + p.dec = (*Buffer).dec_bool + p.size = size_bool + case reflect.Int32: + p.enc = (*Buffer).enc_int32 + p.dec = (*Buffer).dec_int32 + p.size = size_int32 + case reflect.Uint32: + p.enc = (*Buffer).enc_uint32 + p.dec = (*Buffer).dec_int32 // can reuse + p.size = size_uint32 + case reflect.Int64, reflect.Uint64: + p.enc = (*Buffer).enc_int64 + p.dec = (*Buffer).dec_int64 + p.size = size_int64 + case reflect.Float32: + p.enc = (*Buffer).enc_uint32 // can just treat them as bits + p.dec = (*Buffer).dec_int32 + p.size = size_uint32 + case reflect.Float64: + p.enc = (*Buffer).enc_int64 // can just treat them as bits + p.dec = (*Buffer).dec_int64 + p.size = size_int64 + case reflect.String: + p.enc = (*Buffer).enc_string + p.dec = (*Buffer).dec_string + p.size = size_string + case reflect.Struct: p.stype = t1.Elem() + p.isMarshaler = isMarshaler(t1) + p.isUnmarshaler = isUnmarshaler(t1) + if p.Wire == "bytes" { + p.enc = (*Buffer).enc_struct_message + p.dec = (*Buffer).dec_struct_message + p.size = size_struct_message + } else { + p.enc = (*Buffer).enc_struct_group + p.dec = (*Buffer).dec_struct_group + p.size = size_struct_group + } } case reflect.Slice: - if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { - p.stype = t2.Elem() + switch t2 := t1.Elem(); t2.Kind() { + default: + logNoSliceEnc(t1, t2) + break + case reflect.Bool: + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_bool + p.size = size_slice_packed_bool + } else { + p.enc = (*Buffer).enc_slice_bool + p.size = size_slice_bool + } + p.dec = (*Buffer).dec_slice_bool + p.packedDec = (*Buffer).dec_slice_packed_bool + case reflect.Int32: + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_int32 + p.size = size_slice_packed_int32 + } else { + p.enc = (*Buffer).enc_slice_int32 + p.size = size_slice_int32 + } + p.dec = (*Buffer).dec_slice_int32 + p.packedDec = (*Buffer).dec_slice_packed_int32 + case reflect.Uint32: + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_uint32 + p.size = size_slice_packed_uint32 + } else { + p.enc = (*Buffer).enc_slice_uint32 + p.size = size_slice_uint32 + } + p.dec = (*Buffer).dec_slice_int32 + p.packedDec = (*Buffer).dec_slice_packed_int32 + case reflect.Int64, reflect.Uint64: + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_int64 + p.size = size_slice_packed_int64 + } else { + p.enc = (*Buffer).enc_slice_int64 + p.size = size_slice_int64 + } + p.dec = (*Buffer).dec_slice_int64 + p.packedDec = (*Buffer).dec_slice_packed_int64 + case reflect.Uint8: + p.dec = (*Buffer).dec_slice_byte + if p.proto3 { + p.enc = (*Buffer).enc_proto3_slice_byte + p.size = size_proto3_slice_byte + } else { + p.enc = (*Buffer).enc_slice_byte + p.size = size_slice_byte + } + case reflect.Float32, reflect.Float64: + switch t2.Bits() { + case 32: + // can just treat them as bits + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_uint32 + p.size = size_slice_packed_uint32 + } else { + p.enc = (*Buffer).enc_slice_uint32 + p.size = size_slice_uint32 + } + p.dec = (*Buffer).dec_slice_int32 + p.packedDec = (*Buffer).dec_slice_packed_int32 + case 64: + // can just treat them as bits + if p.Packed { + p.enc = (*Buffer).enc_slice_packed_int64 + p.size = size_slice_packed_int64 + } else { + p.enc = (*Buffer).enc_slice_int64 + p.size = size_slice_int64 + } + p.dec = (*Buffer).dec_slice_int64 + p.packedDec = (*Buffer).dec_slice_packed_int64 + default: + logNoSliceEnc(t1, t2) + break + } + case reflect.String: + p.enc = (*Buffer).enc_slice_string + p.dec = (*Buffer).dec_slice_string + p.size = size_slice_string + case reflect.Ptr: + switch t3 := t2.Elem(); t3.Kind() { + default: + fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3) + break + case reflect.Struct: + p.stype = t2.Elem() + p.isMarshaler = isMarshaler(t2) + p.isUnmarshaler = isUnmarshaler(t2) + if p.Wire == "bytes" { + p.enc = (*Buffer).enc_slice_struct_message + p.dec = (*Buffer).dec_slice_struct_message + p.size = size_slice_struct_message + } else { + p.enc = (*Buffer).enc_slice_struct_group + p.dec = (*Buffer).dec_slice_struct_group + p.size = size_slice_struct_group + } + } + case reflect.Slice: + switch t2.Elem().Kind() { + default: + fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem()) + break + case reflect.Uint8: + p.enc = (*Buffer).enc_slice_slice_byte + p.dec = (*Buffer).dec_slice_slice_byte + p.size = size_slice_slice_byte + } } case reflect.Map: + p.enc = (*Buffer).enc_new_map + p.dec = (*Buffer).dec_new_map + p.size = size_new_map + p.mtype = t1 p.mkeyprop = &Properties{} p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) @@ -287,6 +562,20 @@ func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, loc p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) } + // precalculate tag code + wire := p.WireType + if p.Packed { + wire = WireBytes + } + x := uint32(p.Tag)<<3 | uint32(wire) + i := 0 + for i = 0; x > 127; i++ { + p.tagbuf[i] = 0x80 | uint8(x&0x7F) + x >>= 7 + } + p.tagbuf[i] = uint8(x) + p.tagcode = p.tagbuf[0 : i+1] + if p.stype != nil { if lockGetProp { p.sprop = GetProperties(p.stype) @@ -297,9 +586,32 @@ func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, loc } var ( - marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() + unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem() ) +// isMarshaler reports whether type t implements Marshaler. +func isMarshaler(t reflect.Type) bool { + // We're checking for (likely) pointer-receiver methods + // so if t is not a pointer, something is very wrong. + // The calls above only invoke isMarshaler on pointer types. + if t.Kind() != reflect.Ptr { + panic("proto: misuse of isMarshaler") + } + return t.Implements(marshalerType) +} + +// isUnmarshaler reports whether type t implements Unmarshaler. +func isUnmarshaler(t reflect.Type) bool { + // We're checking for (likely) pointer-receiver methods + // so if t is not a pointer, something is very wrong. + // The calls above only invoke isUnmarshaler on pointer types. + if t.Kind() != reflect.Ptr { + panic("proto: misuse of isUnmarshaler") + } + return t.Implements(unmarshalerType) +} + // Init populates the properties from a protocol buffer struct tag. func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { p.init(typ, name, tag, f, true) @@ -309,11 +621,14 @@ func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructF // "bytes,49,opt,def=hello!" p.Name = name p.OrigName = name + if f != nil { + p.field = toField(f) + } if tag == "" { return } p.Parse(tag) - p.setFieldProps(typ, f, lockGetProp) + p.setEncAndDec(typ, f, lockGetProp) } var ( @@ -363,6 +678,9 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { propertiesMap[t] = prop // build properties + prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || + reflect.PtrTo(t).Implements(extendableProtoV1Type) + prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) @@ -372,6 +690,17 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { name := f.Name p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) + if f.Name == "XXX_InternalExtensions" { // special case + p.enc = (*Buffer).enc_exts + p.dec = nil // not needed + p.size = size_exts + } else if f.Name == "XXX_extensions" { // special case + p.enc = (*Buffer).enc_map + p.dec = nil // not needed + p.size = size_map + } else if f.Name == "XXX_unrecognized" { // special case + prop.unrecField = toField(&f) + } oneof := f.Tag.Get("protobuf_oneof") // special case if oneof != "" { // Oneof fields don't use the traditional protobuf tag. @@ -386,6 +715,9 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } print("\n") } + if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { + fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") + } } // Re-order prop.order. @@ -396,7 +728,8 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { var oots []interface{} - _, _, _, oots = om.XXX_OneofFuncs() + prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs() + prop.stype = t // Interpret oneof metadata. prop.OneofTypes = make(map[string]*OneofProperties) @@ -446,6 +779,30 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { return prop } +// Return the Properties object for the x[0]'th field of the structure. +func propByIndex(t reflect.Type, x []int) *Properties { + if len(x) != 1 { + fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t) + return nil + } + prop := GetProperties(t) + return prop.Prop[x[0]] +} + +// Get the address and type of a pointer to a struct from an interface. +func getbase(pb Message) (t reflect.Type, b structPointer, err error) { + if pb == nil { + err = ErrNil + return + } + // get the reflect type of the pointer to the struct. + t = reflect.TypeOf(pb) + // get the address of the struct. + value := reflect.ValueOf(pb) + b = toStructPointer(value) + return +} + // A global registry of enum types. // The generated code will register the generated maps by calling RegisterEnum. @@ -469,42 +826,20 @@ func EnumValueMap(enumType string) map[string]int32 { // A registry of all linked message types. // The string is a fully-qualified proto name ("pkg.Message"). var ( - protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers - protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types - revProtoTypes = make(map[reflect.Type]string) + protoTypes = make(map[string]reflect.Type) + revProtoTypes = make(map[reflect.Type]string) ) // RegisterType is called from generated code and maps from the fully qualified // proto name to the type (pointer to struct) of the protocol buffer. func RegisterType(x Message, name string) { - if _, ok := protoTypedNils[name]; ok { + if _, ok := protoTypes[name]; ok { // TODO: Some day, make this a panic. log.Printf("proto: duplicate proto type registered: %s", name) return } t := reflect.TypeOf(x) - if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { - // Generated code always calls RegisterType with nil x. - // This check is just for extra safety. - protoTypedNils[name] = x - } else { - protoTypedNils[name] = reflect.Zero(t).Interface().(Message) - } - revProtoTypes[t] = name -} - -// RegisterMapType is called from generated code and maps from the fully qualified -// proto name to the native map type of the proto map definition. -func RegisterMapType(x interface{}, name string) { - if reflect.TypeOf(x).Kind() != reflect.Map { - panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) - } - if _, ok := protoMapTypes[name]; ok { - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - protoMapTypes[name] = t + protoTypes[name] = t revProtoTypes[t] = name } @@ -520,14 +855,7 @@ func MessageName(x Message) string { } // MessageType returns the message type (pointer to struct) for a named message. -// The type is not guaranteed to implement proto.Message if the name refers to a -// map entry. -func MessageType(name string) reflect.Type { - if t, ok := protoTypedNils[name]; ok { - return reflect.TypeOf(t) - } - return protoMapTypes[name] -} +func MessageType(name string) reflect.Type { return protoTypes[name] } // A registry of all linked proto files. var ( diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go deleted file mode 100644 index 0f212b3..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_marshal.go +++ /dev/null @@ -1,2681 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// a sizer takes a pointer to a field and the size of its tag, computes the size of -// the encoded data. -type sizer func(pointer, int) int - -// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), -// marshals the field to the end of the slice, returns the slice and error (if any). -type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) - -// marshalInfo is the information used for marshaling a message. -type marshalInfo struct { - typ reflect.Type - fields []*marshalFieldInfo - unrecognized field // offset of XXX_unrecognized - extensions field // offset of XXX_InternalExtensions - v1extensions field // offset of XXX_extensions - sizecache field // offset of XXX_sizecache - initialized int32 // 0 -- only typ is set, 1 -- fully initialized - messageset bool // uses message set wire format - hasmarshaler bool // has custom marshaler - sync.RWMutex // protect extElems map, also for initialization - extElems map[int32]*marshalElemInfo // info of extension elements -} - -// marshalFieldInfo is the information used for marshaling a field of a message. -type marshalFieldInfo struct { - field field - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isPointer bool - required bool // field is required - name string // name of the field, for error reporting - oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements -} - -// marshalElemInfo is the information used for marshaling an extension or oneof element. -type marshalElemInfo struct { - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) -} - -var ( - marshalInfoMap = map[reflect.Type]*marshalInfo{} - marshalInfoLock sync.Mutex -) - -// getMarshalInfo returns the information to marshal a given type of message. -// The info it returns may not necessarily initialized. -// t is the type of the message (NOT the pointer to it). -func getMarshalInfo(t reflect.Type) *marshalInfo { - marshalInfoLock.Lock() - u, ok := marshalInfoMap[t] - if !ok { - u = &marshalInfo{typ: t} - marshalInfoMap[t] = u - } - marshalInfoLock.Unlock() - return u -} - -// Size is the entry point from generated code, -// and should be ONLY called by generated code. -// It computes the size of encoded data of msg. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Size(msg Message) int { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return 0 - } - return u.size(ptr) -} - -// Marshal is the entry point from generated code, -// and should be ONLY called by generated code. -// It marshals msg to the end of b. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return b, ErrNil - } - return u.marshal(b, ptr, deterministic) -} - -func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { - // u := a.marshal, but atomically. - // We use an atomic here to ensure memory consistency. - u := atomicLoadMarshalInfo(&a.marshal) - if u == nil { - // Get marshal information from type of message. - t := reflect.ValueOf(msg).Type() - if t.Kind() != reflect.Ptr { - panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) - } - u = getMarshalInfo(t.Elem()) - // Store it in the cache for later users. - // a.marshal = u, but atomically. - atomicStoreMarshalInfo(&a.marshal, u) - } - return u -} - -// size is the main function to compute the size of the encoded data of a message. -// ptr is the pointer to the message. -func (u *marshalInfo) size(ptr pointer) int { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b, _ := m.Marshal() - return len(b) - } - - n := 0 - for _, f := range u.fields { - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - n += f.sizer(ptr.offset(f.field), f.tagsize) - } - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - n += u.sizeMessageSet(e) - } else { - n += u.sizeExtensions(e) - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - n += u.sizeV1Extensions(m) - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - n += len(s) - } - // cache the result for use in marshal - if u.sizecache.IsValid() { - atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) - } - return n -} - -// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), -// fall back to compute the size. -func (u *marshalInfo) cachedsize(ptr pointer) int { - if u.sizecache.IsValid() { - return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) - } - return u.size(ptr) -} - -// marshal is the main function to marshal a message. It takes a byte slice and appends -// the encoded data to the end of the slice, returns the slice and error (if any). -// ptr is the pointer to the message. -// If deterministic is true, map is marshaled in deterministic order. -func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b1, err := m.Marshal() - b = append(b, b1...) - return b, err - } - - var err, errreq error - // The old marshaler encodes extensions at beginning. - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - b, err = u.appendMessageSet(b, e, deterministic) - } else { - b, err = u.appendExtensions(b, e, deterministic) - } - if err != nil { - return b, err - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - b, err = u.appendV1Extensions(b, m, deterministic) - if err != nil { - return b, err - } - } - for _, f := range u.fields { - if f.required && errreq == nil { - if ptr.offset(f.field).getPointer().isNil() { - // Required field is not set. - // We record the error but keep going, to give a complete marshaling. - errreq = &RequiredNotSetError{f.name} - continue - } - } - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) - if err != nil { - if err1, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = &RequiredNotSetError{f.name + "." + err1.field} - } - continue - } - if err == errRepeatedHasNil { - err = errors.New("proto: repeated field " + f.name + " has nil element") - } - return b, err - } - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - b = append(b, s...) - } - return b, errreq -} - -// computeMarshalInfo initializes the marshal info. -func (u *marshalInfo) computeMarshalInfo() { - u.Lock() - defer u.Unlock() - if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock - return - } - - t := u.typ - u.unrecognized = invalidField - u.extensions = invalidField - u.v1extensions = invalidField - u.sizecache = invalidField - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if reflect.PtrTo(t).Implements(marshalerType) { - u.hasmarshaler = true - atomic.StoreInt32(&u.initialized, 1) - return - } - - // get oneof implementers - var oneofImplementers []interface{} - if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - _, _, _, oneofImplementers = m.XXX_OneofFuncs() - } - - n := t.NumField() - - // deal with XXX fields first - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if !strings.HasPrefix(f.Name, "XXX_") { - continue - } - switch f.Name { - case "XXX_sizecache": - u.sizecache = toField(&f) - case "XXX_unrecognized": - u.unrecognized = toField(&f) - case "XXX_InternalExtensions": - u.extensions = toField(&f) - u.messageset = f.Tag.Get("protobuf_messageset") == "1" - case "XXX_extensions": - u.v1extensions = toField(&f) - case "XXX_NoUnkeyedLiteral": - // nothing to do - default: - panic("unknown XXX field: " + f.Name) - } - n-- - } - - // normal fields - fields := make([]marshalFieldInfo, n) // batch allocation - u.fields = make([]*marshalFieldInfo, 0, n) - for i, j := 0, 0; i < t.NumField(); i++ { - f := t.Field(i) - - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - field := &fields[j] - j++ - field.name = f.Name - u.fields = append(u.fields, field) - if f.Tag.Get("protobuf_oneof") != "" { - field.computeOneofFieldInfo(&f, oneofImplementers) - continue - } - if f.Tag.Get("protobuf") == "" { - // field has no tag (not in generated message), ignore it - u.fields = u.fields[:len(u.fields)-1] - j-- - continue - } - field.computeMarshalFieldInfo(&f) - } - - // fields are marshaled in tag order on the wire. - sort.Sort(byTag(u.fields)) - - atomic.StoreInt32(&u.initialized, 1) -} - -// helper for sorting fields by tag -type byTag []*marshalFieldInfo - -func (a byTag) Len() int { return len(a) } -func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } - -// getExtElemInfo returns the information to marshal an extension element. -// The info it returns is initialized. -func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { - // get from cache first - u.RLock() - e, ok := u.extElems[desc.Field] - u.RUnlock() - if ok { - return e - } - - t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct - tags := strings.Split(desc.Tag, ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(t, tags, false, false) - e = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - isptr: t.Kind() == reflect.Ptr, - } - - // update cache - u.Lock() - if u.extElems == nil { - u.extElems = make(map[int32]*marshalElemInfo) - } - u.extElems[desc.Field] = e - u.Unlock() - return e -} - -// computeMarshalFieldInfo fills up the information to marshal a field. -func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { - // parse protobuf tag of the field. - // tag has format of "bytes,49,opt,name=foo,def=hello!" - tags := strings.Split(f.Tag.Get("protobuf"), ",") - if tags[0] == "" { - return - } - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - if tags[2] == "req" { - fi.required = true - } - fi.setTag(f, tag, wt) - fi.setMarshaler(f, tags) -} - -func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { - fi.field = toField(f) - fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. - fi.isPointer = true - fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) - fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) - - ityp := f.Type // interface type - for _, o := range oneofImplementers { - t := reflect.TypeOf(o) - if !t.Implements(ityp) { - continue - } - sf := t.Elem().Field(0) // oneof implementer is a struct with a single field - tags := strings.Split(sf.Tag.Get("protobuf"), ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value - fi.oneofElems[t.Elem()] = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - } - } -} - -type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) -} - -// wiretype returns the wire encoding of the type. -func wiretype(encoding string) uint64 { - switch encoding { - case "fixed32": - return WireFixed32 - case "fixed64": - return WireFixed64 - case "varint", "zigzag32", "zigzag64": - return WireVarint - case "bytes": - return WireBytes - case "group": - return WireStartGroup - } - panic("unknown wire type " + encoding) -} - -// setTag fills up the tag (in wire format) and its size in the info of a field. -func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { - fi.field = toField(f) - fi.wiretag = uint64(tag)<<3 | wt - fi.tagsize = SizeVarint(uint64(tag) << 3) -} - -// setMarshaler fills up the sizer and marshaler in the info of a field. -func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { - switch f.Type.Kind() { - case reflect.Map: - // map field - fi.isPointer = true - fi.sizer, fi.marshaler = makeMapMarshaler(f) - return - case reflect.Ptr, reflect.Slice: - fi.isPointer = true - } - fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) -} - -// typeMarshaler returns the sizer and marshaler of a given field. -// t is the type of the field. -// tags is the generated "protobuf" tag of the field. -// If nozero is true, zero value is not marshaled to the wire. -// If oneof is true, it is a oneof field. -func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { - encoding := tags[0] - - pointer := false - slice := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - packed := false - proto3 := false - for i := 2; i < len(tags); i++ { - if tags[i] == "packed" { - packed = true - } - if tags[i] == "proto3" { - proto3 = true - } - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return sizeBoolPtr, appendBoolPtr - } - if slice { - if packed { - return sizeBoolPackedSlice, appendBoolPackedSlice - } - return sizeBoolSlice, appendBoolSlice - } - if nozero { - return sizeBoolValueNoZero, appendBoolValueNoZero - } - return sizeBoolValue, appendBoolValue - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixed32Ptr, appendFixed32Ptr - } - if slice { - if packed { - return sizeFixed32PackedSlice, appendFixed32PackedSlice - } - return sizeFixed32Slice, appendFixed32Slice - } - if nozero { - return sizeFixed32ValueNoZero, appendFixed32ValueNoZero - } - return sizeFixed32Value, appendFixed32Value - case "varint": - if pointer { - return sizeVarint32Ptr, appendVarint32Ptr - } - if slice { - if packed { - return sizeVarint32PackedSlice, appendVarint32PackedSlice - } - return sizeVarint32Slice, appendVarint32Slice - } - if nozero { - return sizeVarint32ValueNoZero, appendVarint32ValueNoZero - } - return sizeVarint32Value, appendVarint32Value - } - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixedS32Ptr, appendFixedS32Ptr - } - if slice { - if packed { - return sizeFixedS32PackedSlice, appendFixedS32PackedSlice - } - return sizeFixedS32Slice, appendFixedS32Slice - } - if nozero { - return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero - } - return sizeFixedS32Value, appendFixedS32Value - case "varint": - if pointer { - return sizeVarintS32Ptr, appendVarintS32Ptr - } - if slice { - if packed { - return sizeVarintS32PackedSlice, appendVarintS32PackedSlice - } - return sizeVarintS32Slice, appendVarintS32Slice - } - if nozero { - return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero - } - return sizeVarintS32Value, appendVarintS32Value - case "zigzag32": - if pointer { - return sizeZigzag32Ptr, appendZigzag32Ptr - } - if slice { - if packed { - return sizeZigzag32PackedSlice, appendZigzag32PackedSlice - } - return sizeZigzag32Slice, appendZigzag32Slice - } - if nozero { - return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero - } - return sizeZigzag32Value, appendZigzag32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixed64Ptr, appendFixed64Ptr - } - if slice { - if packed { - return sizeFixed64PackedSlice, appendFixed64PackedSlice - } - return sizeFixed64Slice, appendFixed64Slice - } - if nozero { - return sizeFixed64ValueNoZero, appendFixed64ValueNoZero - } - return sizeFixed64Value, appendFixed64Value - case "varint": - if pointer { - return sizeVarint64Ptr, appendVarint64Ptr - } - if slice { - if packed { - return sizeVarint64PackedSlice, appendVarint64PackedSlice - } - return sizeVarint64Slice, appendVarint64Slice - } - if nozero { - return sizeVarint64ValueNoZero, appendVarint64ValueNoZero - } - return sizeVarint64Value, appendVarint64Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixedS64Ptr, appendFixedS64Ptr - } - if slice { - if packed { - return sizeFixedS64PackedSlice, appendFixedS64PackedSlice - } - return sizeFixedS64Slice, appendFixedS64Slice - } - if nozero { - return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero - } - return sizeFixedS64Value, appendFixedS64Value - case "varint": - if pointer { - return sizeVarintS64Ptr, appendVarintS64Ptr - } - if slice { - if packed { - return sizeVarintS64PackedSlice, appendVarintS64PackedSlice - } - return sizeVarintS64Slice, appendVarintS64Slice - } - if nozero { - return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero - } - return sizeVarintS64Value, appendVarintS64Value - case "zigzag64": - if pointer { - return sizeZigzag64Ptr, appendZigzag64Ptr - } - if slice { - if packed { - return sizeZigzag64PackedSlice, appendZigzag64PackedSlice - } - return sizeZigzag64Slice, appendZigzag64Slice - } - if nozero { - return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero - } - return sizeZigzag64Value, appendZigzag64Value - } - case reflect.Float32: - if pointer { - return sizeFloat32Ptr, appendFloat32Ptr - } - if slice { - if packed { - return sizeFloat32PackedSlice, appendFloat32PackedSlice - } - return sizeFloat32Slice, appendFloat32Slice - } - if nozero { - return sizeFloat32ValueNoZero, appendFloat32ValueNoZero - } - return sizeFloat32Value, appendFloat32Value - case reflect.Float64: - if pointer { - return sizeFloat64Ptr, appendFloat64Ptr - } - if slice { - if packed { - return sizeFloat64PackedSlice, appendFloat64PackedSlice - } - return sizeFloat64Slice, appendFloat64Slice - } - if nozero { - return sizeFloat64ValueNoZero, appendFloat64ValueNoZero - } - return sizeFloat64Value, appendFloat64Value - case reflect.String: - if pointer { - return sizeStringPtr, appendStringPtr - } - if slice { - return sizeStringSlice, appendStringSlice - } - if nozero { - return sizeStringValueNoZero, appendStringValueNoZero - } - return sizeStringValue, appendStringValue - case reflect.Slice: - if slice { - return sizeBytesSlice, appendBytesSlice - } - if oneof { - // Oneof bytes field may also have "proto3" tag. - // We want to marshal it as a oneof field. Do this - // check before the proto3 check. - return sizeBytesOneof, appendBytesOneof - } - if proto3 { - return sizeBytes3, appendBytes3 - } - return sizeBytes, appendBytes - case reflect.Struct: - switch encoding { - case "group": - if slice { - return makeGroupSliceMarshaler(getMarshalInfo(t)) - } - return makeGroupMarshaler(getMarshalInfo(t)) - case "bytes": - if slice { - return makeMessageSliceMarshaler(getMarshalInfo(t)) - } - return makeMessageMarshaler(getMarshalInfo(t)) - } - } - panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) -} - -// Below are functions to size/marshal a specific type of a field. -// They are stored in the field's info, and called by function pointers. -// They have type sizer or marshaler. - -func sizeFixed32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixedS32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFloat32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - return (4 + tagsize) * len(s) -} -func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixed64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFixedS64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFloat64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - return (8 + tagsize) * len(s) -} -func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeVarint32Value(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarint32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarint64Value(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - return SizeVarint(v) + tagsize -} -func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return SizeVarint(v) + tagsize -} -func sizeVarint64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return SizeVarint(*p) + tagsize -} -func sizeVarint64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(v) + tagsize - } - return n -} -func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize - } - return n -} -func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize - } - return n -} -func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeBoolValue(_ pointer, tagsize int) int { - return 1 + tagsize -} -func sizeBoolValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toBool() - if !v { - return 0 - } - return 1 + tagsize -} -func sizeBoolPtr(ptr pointer, tagsize int) int { - p := *ptr.toBoolPtr() - if p == nil { - return 0 - } - return 1 + tagsize -} -func sizeBoolSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - return (1 + tagsize) * len(s) -} -func sizeBoolPackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return 0 - } - return len(s) + SizeVarint(uint64(len(s))) + tagsize -} -func sizeStringValue(ptr pointer, tagsize int) int { - v := *ptr.toString() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toString() - if v == "" { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringPtr(ptr pointer, tagsize int) int { - p := *ptr.toStringPtr() - if p == nil { - return 0 - } - v := *p - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringSlice(ptr pointer, tagsize int) int { - s := *ptr.toStringSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} -func sizeBytes(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if v == nil { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytes3(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if len(v) == 0 { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesOneof(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesSlice(ptr pointer, tagsize int) int { - s := *ptr.toBytesSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} - -// appendFixed32 appends an encoded fixed32 to b. -func appendFixed32(b []byte, v uint32) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24)) - return b -} - -// appendFixed64 appends an encoded fixed64 to b. -func appendFixed64(b []byte, v uint64) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24), - byte(v>>32), - byte(v>>40), - byte(v>>48), - byte(v>>56)) - return b -} - -// appendVarint appends an encoded varint to b. -func appendVarint(b []byte, v uint64) []byte { - // TODO: make 1-byte (maybe 2-byte) case inline-able, once we - // have non-leaf inliner. - switch { - case v < 1<<7: - b = append(b, byte(v)) - case v < 1<<14: - b = append(b, - byte(v&0x7f|0x80), - byte(v>>7)) - case v < 1<<21: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte(v>>14)) - case v < 1<<28: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte(v>>21)) - case v < 1<<35: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte(v>>28)) - case v < 1<<42: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte(v>>35)) - case v < 1<<49: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte(v>>42)) - case v < 1<<56: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte(v>>49)) - case v < 1<<63: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte(v>>56)) - default: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte((v>>56)&0x7f|0x80), - 1) - } - return b -} - -func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, *p) - return b, nil -} -func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(*p)) - return b, nil -} -func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(*p)) - return b, nil -} -func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, *p) - return b, nil -} -func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(*p)) - return b, nil -} -func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(*p)) - return b, nil -} -func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, *p) - return b, nil -} -func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - } - return b, nil -} -func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, v) - } - return b, nil -} -func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - if !v { - return b, nil - } - b = appendVarint(b, wiretag) - b = append(b, 1) - return b, nil -} - -func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toBoolPtr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - if *p { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(len(s))) - for _, v := range s { - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if v == "" { - return b, nil - } - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toStringSlice() - for _, v := range s { - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} -func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if v == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if len(v) == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBytesSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} - -// makeGroupMarshaler returns the sizer and marshaler for a group. -// u is the marshal info of the underlying message. -func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - return u.size(p) + 2*tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - var err error - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, p, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - return b, err - } -} - -// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. -// u is the marshal info of the underlying message. -func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - n += u.size(v) + 2*tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err, errreq error - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, v, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - if err != nil { - if _, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = err - } - continue - } - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, errreq - } -} - -// makeMessageMarshaler returns the sizer and marshaler for a message field. -// u is the marshal info of the message. -func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.size(p) - return siz + SizeVarint(uint64(siz)) + tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(p) - b = appendVarint(b, uint64(siz)) - return u.marshal(b, p, deterministic) - } -} - -// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. -// u is the marshal info of the message. -func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - siz := u.size(v) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err, errreq error - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(v) - b = appendVarint(b, uint64(siz)) - b, err = u.marshal(b, v, deterministic) - - if err != nil { - if _, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = err - } - continue - } - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, errreq - } -} - -// makeMapMarshaler returns the sizer and marshaler for a map field. -// f is the pointer to the reflect data structure of the field. -func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { - // figure out key and value type - t := f.Type - keyType := t.Key() - valType := t.Elem() - keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") - valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") - keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map - valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map - keyWireTag := 1<<3 | wiretype(keyTags[0]) - valWireTag := 2<<3 | wiretype(valTags[0]) - - // We create an interface to get the addresses of the map key and value. - // If value is pointer-typed, the interface is a direct interface, the - // idata itself is the value. Otherwise, the idata is the pointer to the - // value. - // Key cannot be pointer-typed. - valIsPtr := valType.Kind() == reflect.Ptr - return func(ptr pointer, tagsize int) int { - m := ptr.asPointerTo(t).Elem() // the map - n := 0 - for _, k := range m.MapKeys() { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { - m := ptr.asPointerTo(t).Elem() // the map - var err error - keys := m.MapKeys() - if len(keys) > 1 && deterministic { - sort.Sort(mapKeys(keys)) - } - for _, k := range keys { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - b = appendVarint(b, tag) - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - b = appendVarint(b, uint64(siz)) - b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) - if err != nil { - return b, err - } - b, err = valMarshaler(b, vaddr, valWireTag, deterministic) - if err != nil && err != ErrNil { // allow nil value in map - return b, err - } - } - return b, nil - } -} - -// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. -// fi is the marshal info of the field. -// f is the pointer to the reflect data structure of the field. -func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { - // Oneof field is an interface. We need to get the actual data type on the fly. - t := f.Type - return func(ptr pointer, _ int) int { - p := ptr.getInterfacePointer() - if p.isNil() { - return 0 - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - e := fi.oneofElems[telem] - return e.sizer(p, e.tagsize) - }, - func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { - p := ptr.getInterfacePointer() - if p.isNil() { - return b, nil - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { - return b, errOneofHasNil - } - e := fi.oneofElems[telem] - return e.marshaler(b, p, e.wiretag, deterministic) - } -} - -// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. -func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - mu.Unlock() - return n -} - -// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. -func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - // Not sure this is required, but the old code does it. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil -} - -// message set format is: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } - -// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field -// in message set format (above). -func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for id, e := range m { - n += 2 // start group, end group. tag = 1 (size=1) - n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - siz := len(msgWithLen) - n += siz + 1 // message, tag = 3 (size=1) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, 1) // message, tag = 3 (size=1) - } - mu.Unlock() - return n -} - -// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) -// to the end of byte slice b. -func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for id, e := range m { - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - if err != nil { - return b, err - } - b = append(b, 1<<3|WireEndGroup) - } - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, id := range keys { - e := m[int32(id)] - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - b = append(b, 1<<3|WireEndGroup) - if err != nil { - return b, err - } - } - return b, nil -} - -// sizeV1Extensions computes the size of encoded data for a V1-API extension field. -func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { - if m == nil { - return 0 - } - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - return n -} - -// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. -func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { - if m == nil { - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - var err error - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil -} - -// newMarshaler is the interface representing objects that can marshal themselves. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newMarshaler interface { - XXX_Size() int - XXX_Marshal(b []byte, deterministic bool) ([]byte, error) -} - -// Size returns the encoded size of a protocol buffer message. -// This is the main entry point. -func Size(pb Message) int { - if m, ok := pb.(newMarshaler); ok { - return m.XXX_Size() - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, _ := m.Marshal() - return len(b) - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return 0 - } - var info InternalMessageInfo - return info.Size(pb) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, returning the data. -// This is the main entry point. -func Marshal(pb Message) ([]byte, error) { - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - b := make([]byte, 0, siz) - return m.XXX_Marshal(b, false) - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - return m.Marshal() - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return nil, ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - b := make([]byte, 0, siz) - return info.Marshal(b, pb, false) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, writing the result to the -// Buffer. -// This is an alternative entry point. It is not necessary to use -// a Buffer for most applications. -func (p *Buffer) Marshal(pb Message) error { - var err error - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - p.grow(siz) // make sure buf has enough capacity - p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) - return err - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, err := m.Marshal() - p.buf = append(p.buf, b...) - return err - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - p.grow(siz) // make sure buf has enough capacity - p.buf, err = info.Marshal(p.buf, pb, p.deterministic) - return err -} - -// grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After grow(n), at least n bytes can be written to the -// buffer without another allocation. -func (p *Buffer) grow(n int) { - need := len(p.buf) + n - if need <= cap(p.buf) { - return - } - newCap := len(p.buf) * 2 - if newCap < need { - newCap = need - } - p.buf = append(make([]byte, 0, newCap), p.buf...) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go deleted file mode 100644 index 5525def..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_merge.go +++ /dev/null @@ -1,654 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -// Merge merges the src message into dst. -// This assumes that dst and src of the same type and are non-nil. -func (a *InternalMessageInfo) Merge(dst, src Message) { - mi := atomicLoadMergeInfo(&a.merge) - if mi == nil { - mi = getMergeInfo(reflect.TypeOf(dst).Elem()) - atomicStoreMergeInfo(&a.merge, mi) - } - mi.merge(toPointer(&dst), toPointer(&src)) -} - -type mergeInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []mergeFieldInfo - unrecognized field // Offset of XXX_unrecognized -} - -type mergeFieldInfo struct { - field field // Offset of field, guaranteed to be valid - - // isPointer reports whether the value in the field is a pointer. - // This is true for the following situations: - // * Pointer to struct - // * Pointer to basic type (proto2 only) - // * Slice (first value in slice header is a pointer) - // * String (first value in string header is a pointer) - isPointer bool - - // basicWidth reports the width of the field assuming that it is directly - // embedded in the struct (as is the case for basic types in proto3). - // The possible values are: - // 0: invalid - // 1: bool - // 4: int32, uint32, float32 - // 8: int64, uint64, float64 - basicWidth int - - // Where dst and src are pointers to the types being merged. - merge func(dst, src pointer) -} - -var ( - mergeInfoMap = map[reflect.Type]*mergeInfo{} - mergeInfoLock sync.Mutex -) - -func getMergeInfo(t reflect.Type) *mergeInfo { - mergeInfoLock.Lock() - defer mergeInfoLock.Unlock() - mi := mergeInfoMap[t] - if mi == nil { - mi = &mergeInfo{typ: t} - mergeInfoMap[t] = mi - } - return mi -} - -// merge merges src into dst assuming they are both of type *mi.typ. -func (mi *mergeInfo) merge(dst, src pointer) { - if dst.isNil() { - panic("proto: nil destination") - } - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&mi.initialized) == 0 { - mi.computeMergeInfo() - } - - for _, fi := range mi.fields { - sfp := src.offset(fi.field) - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string - continue - } - if fi.basicWidth > 0 { - switch { - case fi.basicWidth == 1 && !*sfp.toBool(): - continue - case fi.basicWidth == 4 && *sfp.toUint32() == 0: - continue - case fi.basicWidth == 8 && *sfp.toUint64() == 0: - continue - } - } - } - - dfp := dst.offset(fi.field) - fi.merge(dfp, sfp) - } - - // TODO: Make this faster? - out := dst.asPointerTo(mi.typ).Elem() - in := src.asPointerTo(mi.typ).Elem() - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - if mi.unrecognized.IsValid() { - if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { - *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) - } - } -} - -func (mi *mergeInfo) computeMergeInfo() { - mi.lock.Lock() - defer mi.lock.Unlock() - if mi.initialized != 0 { - return - } - t := mi.typ - n := t.NumField() - - props := GetProperties(t) - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - mfi := mergeFieldInfo{field: toField(&f)} - tf := f.Type - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - switch tf.Kind() { - case reflect.Ptr, reflect.Slice, reflect.String: - // As a special case, we assume slices and strings are pointers - // since we know that the first field in the SliceSlice or - // StringHeader is a data pointer. - mfi.isPointer = true - case reflect.Bool: - mfi.basicWidth = 1 - case reflect.Int32, reflect.Uint32, reflect.Float32: - mfi.basicWidth = 4 - case reflect.Int64, reflect.Uint64, reflect.Float64: - mfi.basicWidth = 8 - } - } - - // Unwrap tf to get at its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + tf.Name()) - } - - switch tf.Kind() { - case reflect.Int32: - switch { - case isSlice: // E.g., []int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Slice is not defined (see pointer_reflect.go). - /* - sfsp := src.toInt32Slice() - if *sfsp != nil { - dfsp := dst.toInt32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - */ - sfs := src.getInt32Slice() - if sfs != nil { - dfs := dst.getInt32Slice() - dfs = append(dfs, sfs...) - if dfs == nil { - dfs = []int32{} - } - dst.setInt32Slice(dfs) - } - } - case isPointer: // E.g., *int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). - /* - sfpp := src.toInt32Ptr() - if *sfpp != nil { - dfpp := dst.toInt32Ptr() - if *dfpp == nil { - *dfpp = Int32(**sfpp) - } else { - **dfpp = **sfpp - } - } - */ - sfp := src.getInt32Ptr() - if sfp != nil { - dfp := dst.getInt32Ptr() - if dfp == nil { - dst.setInt32Ptr(*sfp) - } else { - *dfp = *sfp - } - } - } - default: // E.g., int32 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt32(); v != 0 { - *dst.toInt32() = v - } - } - } - case reflect.Int64: - switch { - case isSlice: // E.g., []int64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toInt64Slice() - if *sfsp != nil { - dfsp := dst.toInt64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - } - case isPointer: // E.g., *int64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toInt64Ptr() - if *sfpp != nil { - dfpp := dst.toInt64Ptr() - if *dfpp == nil { - *dfpp = Int64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., int64 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt64(); v != 0 { - *dst.toInt64() = v - } - } - } - case reflect.Uint32: - switch { - case isSlice: // E.g., []uint32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint32Slice() - if *sfsp != nil { - dfsp := dst.toUint32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint32{} - } - } - } - case isPointer: // E.g., *uint32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint32Ptr() - if *sfpp != nil { - dfpp := dst.toUint32Ptr() - if *dfpp == nil { - *dfpp = Uint32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint32 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint32(); v != 0 { - *dst.toUint32() = v - } - } - } - case reflect.Uint64: - switch { - case isSlice: // E.g., []uint64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint64Slice() - if *sfsp != nil { - dfsp := dst.toUint64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint64{} - } - } - } - case isPointer: // E.g., *uint64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint64Ptr() - if *sfpp != nil { - dfpp := dst.toUint64Ptr() - if *dfpp == nil { - *dfpp = Uint64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint64 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint64(); v != 0 { - *dst.toUint64() = v - } - } - } - case reflect.Float32: - switch { - case isSlice: // E.g., []float32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat32Slice() - if *sfsp != nil { - dfsp := dst.toFloat32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float32{} - } - } - } - case isPointer: // E.g., *float32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat32Ptr() - if *sfpp != nil { - dfpp := dst.toFloat32Ptr() - if *dfpp == nil { - *dfpp = Float32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float32 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat32(); v != 0 { - *dst.toFloat32() = v - } - } - } - case reflect.Float64: - switch { - case isSlice: // E.g., []float64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat64Slice() - if *sfsp != nil { - dfsp := dst.toFloat64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float64{} - } - } - } - case isPointer: // E.g., *float64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat64Ptr() - if *sfpp != nil { - dfpp := dst.toFloat64Ptr() - if *dfpp == nil { - *dfpp = Float64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float64 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat64(); v != 0 { - *dst.toFloat64() = v - } - } - } - case reflect.Bool: - switch { - case isSlice: // E.g., []bool - mfi.merge = func(dst, src pointer) { - sfsp := src.toBoolSlice() - if *sfsp != nil { - dfsp := dst.toBoolSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []bool{} - } - } - } - case isPointer: // E.g., *bool - mfi.merge = func(dst, src pointer) { - sfpp := src.toBoolPtr() - if *sfpp != nil { - dfpp := dst.toBoolPtr() - if *dfpp == nil { - *dfpp = Bool(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., bool - mfi.merge = func(dst, src pointer) { - if v := *src.toBool(); v { - *dst.toBool() = v - } - } - } - case reflect.String: - switch { - case isSlice: // E.g., []string - mfi.merge = func(dst, src pointer) { - sfsp := src.toStringSlice() - if *sfsp != nil { - dfsp := dst.toStringSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []string{} - } - } - } - case isPointer: // E.g., *string - mfi.merge = func(dst, src pointer) { - sfpp := src.toStringPtr() - if *sfpp != nil { - dfpp := dst.toStringPtr() - if *dfpp == nil { - *dfpp = String(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., string - mfi.merge = func(dst, src pointer) { - if v := *src.toString(); v != "" { - *dst.toString() = v - } - } - } - case reflect.Slice: - isProto3 := props.Prop[i].proto3 - switch { - case isPointer: - panic("bad pointer in byte slice case in " + tf.Name()) - case tf.Elem().Kind() != reflect.Uint8: - panic("bad element kind in byte slice case in " + tf.Name()) - case isSlice: // E.g., [][]byte - mfi.merge = func(dst, src pointer) { - sbsp := src.toBytesSlice() - if *sbsp != nil { - dbsp := dst.toBytesSlice() - for _, sb := range *sbsp { - if sb == nil { - *dbsp = append(*dbsp, nil) - } else { - *dbsp = append(*dbsp, append([]byte{}, sb...)) - } - } - if *dbsp == nil { - *dbsp = [][]byte{} - } - } - } - default: // E.g., []byte - mfi.merge = func(dst, src pointer) { - sbp := src.toBytes() - if *sbp != nil { - dbp := dst.toBytes() - if !isProto3 || len(*sbp) > 0 { - *dbp = append([]byte{}, *sbp...) - } - } - } - } - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("message field %s without pointer", tf)) - case isSlice: // E.g., []*pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sps := src.getPointerSlice() - if sps != nil { - dps := dst.getPointerSlice() - for _, sp := range sps { - var dp pointer - if !sp.isNil() { - dp = valToPointer(reflect.New(tf)) - mi.merge(dp, sp) - } - dps = append(dps, dp) - } - if dps == nil { - dps = []pointer{} - } - dst.setPointerSlice(dps) - } - } - default: // E.g., *pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sp := src.getPointer() - if !sp.isNil() { - dp := dst.getPointer() - if dp.isNil() { - dp = valToPointer(reflect.New(tf)) - dst.setPointer(dp) - } - mi.merge(dp, sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic("bad pointer or slice in map case in " + tf.Name()) - default: // E.g., map[K]V - mfi.merge = func(dst, src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - dm := dst.asPointerTo(tf).Elem() - if dm.IsNil() { - dm.Set(reflect.MakeMap(tf)) - } - - switch tf.Elem().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(Clone(val.Interface().(Message))) - dm.SetMapIndex(key, val) - } - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - dm.SetMapIndex(key, val) - } - default: // Basic type (e.g., string) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - dm.SetMapIndex(key, val) - } - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic("bad pointer or slice in interface case in " + tf.Name()) - default: // E.g., interface{} - // TODO: Make this faster? - mfi.merge = func(dst, src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - du := dst.asPointerTo(tf).Elem() - typ := su.Elem().Type() - if du.IsNil() || du.Elem().Type() != typ { - du.Set(reflect.New(typ.Elem())) // Initialize interface if empty - } - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - dv := du.Elem().Elem().Field(0) - if dv.Kind() == reflect.Ptr && dv.IsNil() { - dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - Merge(dv.Interface().(Message), sv.Interface().(Message)) - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) - default: // Basic type (e.g., string) - dv.Set(sv) - } - } - } - } - default: - panic(fmt.Sprintf("merger not found for type:%s", tf)) - } - mi.fields = append(mi.fields, mfi) - } - - mi.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - mi.unrecognized = toField(&f) - } - - atomic.StoreInt32(&mi.initialized, 1) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go deleted file mode 100644 index 55f0340..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go +++ /dev/null @@ -1,1967 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "io" - "math" - "reflect" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// Unmarshal is the entry point from the generated .pb.go files. -// This function is not intended to be used by non-generated code. -// This function is not subject to any compatibility guarantee. -// msg contains a pointer to a protocol buffer struct. -// b is the data to be unmarshaled into the protocol buffer. -// a is a pointer to a place to store cached unmarshal information. -func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { - // Load the unmarshal information for this message type. - // The atomic load ensures memory consistency. - u := atomicLoadUnmarshalInfo(&a.unmarshal) - if u == nil { - // Slow path: find unmarshal info for msg, update a with it. - u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) - atomicStoreUnmarshalInfo(&a.unmarshal, u) - } - // Then do the unmarshaling. - err := u.unmarshal(toPointer(&msg), b) - return err -} - -type unmarshalInfo struct { - typ reflect.Type // type of the protobuf struct - - // 0 = only typ field is initialized - // 1 = completely initialized - initialized int32 - lock sync.Mutex // prevents double initialization - dense []unmarshalFieldInfo // fields indexed by tag # - sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # - reqFields []string // names of required fields - reqMask uint64 // 1<<len(reqFields)-1 - unrecognized field // offset of []byte to put unrecognized data (or invalidField if we should throw it away) - extensions field // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist - oldExtensions field // offset of old-form extensions field (of type map[int]Extension) - extensionRanges []ExtensionRange // if non-nil, implies extensions field is valid - isMessageSet bool // if true, implies extensions field is valid -} - -// An unmarshaler takes a stream of bytes and a pointer to a field of a message. -// It decodes the field, stores it at f, and returns the unused bytes. -// w is the wire encoding. -// b is the data after the tag and wire encoding have been read. -type unmarshaler func(b []byte, f pointer, w int) ([]byte, error) - -type unmarshalFieldInfo struct { - // location of the field in the proto message structure. - field field - - // function to unmarshal the data for the field. - unmarshal unmarshaler - - // if a required field, contains a single set bit at this field's index in the required field list. - reqMask uint64 -} - -var ( - unmarshalInfoMap = map[reflect.Type]*unmarshalInfo{} - unmarshalInfoLock sync.Mutex -) - -// getUnmarshalInfo returns the data structure which can be -// subsequently used to unmarshal a message of the given type. -// t is the type of the message (note: not pointer to message). -func getUnmarshalInfo(t reflect.Type) *unmarshalInfo { - // It would be correct to return a new unmarshalInfo - // unconditionally. We would end up allocating one - // per occurrence of that type as a message or submessage. - // We use a cache here just to reduce memory usage. - unmarshalInfoLock.Lock() - defer unmarshalInfoLock.Unlock() - u := unmarshalInfoMap[t] - if u == nil { - u = &unmarshalInfo{typ: t} - // Note: we just set the type here. The rest of the fields - // will be initialized on first use. - unmarshalInfoMap[t] = u - } - return u -} - -// unmarshal does the main work of unmarshaling a message. -// u provides type information used to unmarshal the message. -// m is a pointer to a protocol buffer message. -// b is a byte stream to unmarshal into m. -// This is top routine used when recursively unmarshaling submessages. -func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeUnmarshalInfo() - } - if u.isMessageSet { - return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions()) - } - var reqMask uint64 // bitmask of required fields we've seen. - var rnse *RequiredNotSetError // an instance of a RequiredNotSetError returned by a submessage. - for len(b) > 0 { - // Read tag and wire type. - // Special case 1 and 2 byte varints. - var x uint64 - if b[0] < 128 { - x = uint64(b[0]) - b = b[1:] - } else if len(b) >= 2 && b[1] < 128 { - x = uint64(b[0]&0x7f) + uint64(b[1])<<7 - b = b[2:] - } else { - var n int - x, n = decodeVarint(b) - if n == 0 { - return io.ErrUnexpectedEOF - } - b = b[n:] - } - tag := x >> 3 - wire := int(x) & 7 - - // Dispatch on the tag to one of the unmarshal* functions below. - var f unmarshalFieldInfo - if tag < uint64(len(u.dense)) { - f = u.dense[tag] - } else { - f = u.sparse[tag] - } - if fn := f.unmarshal; fn != nil { - var err error - b, err = fn(b, m.offset(f.field), wire) - if err == nil { - reqMask |= f.reqMask - continue - } - if r, ok := err.(*RequiredNotSetError); ok { - // Remember this error, but keep parsing. We need to produce - // a full parse even if a required field is missing. - rnse = r - reqMask |= f.reqMask - continue - } - if err != errInternalBadWireType { - return err - } - // Fragments with bad wire type are treated as unknown fields. - } - - // Unknown tag. - if !u.unrecognized.IsValid() { - // Don't keep unrecognized data; just skip it. - var err error - b, err = skipField(b, wire) - if err != nil { - return err - } - continue - } - // Keep unrecognized data around. - // maybe in extensions, maybe in the unrecognized field. - z := m.offset(u.unrecognized).toBytes() - var emap map[int32]Extension - var e Extension - for _, r := range u.extensionRanges { - if uint64(r.Start) <= tag && tag <= uint64(r.End) { - if u.extensions.IsValid() { - mp := m.offset(u.extensions).toExtensions() - emap = mp.extensionsWrite() - e = emap[int32(tag)] - z = &e.enc - break - } - if u.oldExtensions.IsValid() { - p := m.offset(u.oldExtensions).toOldExtensions() - emap = *p - if emap == nil { - emap = map[int32]Extension{} - *p = emap - } - e = emap[int32(tag)] - z = &e.enc - break - } - panic("no extensions field available") - } - } - - // Use wire type to skip data. - var err error - b0 := b - b, err = skipField(b, wire) - if err != nil { - return err - } - *z = encodeVarint(*z, tag<<3|uint64(wire)) - *z = append(*z, b0[:len(b0)-len(b)]...) - - if emap != nil { - emap[int32(tag)] = e - } - } - if rnse != nil { - // A required field of a submessage/group is missing. Return that error. - return rnse - } - if reqMask != u.reqMask { - // A required field of this message is missing. - for _, n := range u.reqFields { - if reqMask&1 == 0 { - return &RequiredNotSetError{n} - } - reqMask >>= 1 - } - } - return nil -} - -// computeUnmarshalInfo fills in u with information for use -// in unmarshaling protocol buffers of type u.typ. -func (u *unmarshalInfo) computeUnmarshalInfo() { - u.lock.Lock() - defer u.lock.Unlock() - if u.initialized != 0 { - return - } - t := u.typ - n := t.NumField() - - // Set up the "not found" value for the unrecognized byte buffer. - // This is the default for proto3. - u.unrecognized = invalidField - u.extensions = invalidField - u.oldExtensions = invalidField - - // List of the generated type and offset for each oneof field. - type oneofField struct { - ityp reflect.Type // interface type of oneof field - field field // offset in containing message - } - var oneofFields []oneofField - - for i := 0; i < n; i++ { - f := t.Field(i) - if f.Name == "XXX_unrecognized" { - // The byte slice used to hold unrecognized input is special. - if f.Type != reflect.TypeOf(([]byte)(nil)) { - panic("bad type for XXX_unrecognized field: " + f.Type.Name()) - } - u.unrecognized = toField(&f) - continue - } - if f.Name == "XXX_InternalExtensions" { - // Ditto here. - if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { - panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) - } - u.extensions = toField(&f) - if f.Tag.Get("protobuf_messageset") == "1" { - u.isMessageSet = true - } - continue - } - if f.Name == "XXX_extensions" { - // An older form of the extensions field. - if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { - panic("bad type for XXX_extensions field: " + f.Type.Name()) - } - u.oldExtensions = toField(&f) - continue - } - if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { - continue - } - - oneof := f.Tag.Get("protobuf_oneof") - if oneof != "" { - oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) - // The rest of oneof processing happens below. - continue - } - - tags := f.Tag.Get("protobuf") - tagArray := strings.Split(tags, ",") - if len(tagArray) < 2 { - panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) - } - tag, err := strconv.Atoi(tagArray[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tagArray[1]) - } - - name := "" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Extract unmarshaling function from the field (its type and tags). - unmarshal := fieldUnmarshaler(&f) - - // Required field? - var reqMask uint64 - if tagArray[2] == "req" { - bit := len(u.reqFields) - u.reqFields = append(u.reqFields, name) - reqMask = uint64(1) << uint(bit) - // TODO: if we have more than 64 required fields, we end up - // not verifying that all required fields are present. - // Fix this, perhaps using a count of required fields? - } - - // Store the info in the correct slot in the message. - u.setTag(tag, toField(&f), unmarshal, reqMask) - } - - // Find any types associated with oneof fields. - // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? - fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") - if fn.IsValid() { - res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} - for i := res.Len() - 1; i >= 0; i-- { - v := res.Index(i) // interface{} - tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X - typ := tptr.Elem() // Msg_X - - f := typ.Field(0) // oneof implementers have one field - baseUnmarshal := fieldUnmarshaler(&f) - tagstr := strings.Split(f.Tag.Get("protobuf"), ",")[1] - tag, err := strconv.Atoi(tagstr) - if err != nil { - panic("protobuf tag field not an integer: " + tagstr) - } - - // Find the oneof field that this struct implements. - // Might take O(n^2) to process all of the oneofs, but who cares. - for _, of := range oneofFields { - if tptr.Implements(of.ityp) { - // We have found the corresponding interface for this struct. - // That lets us know where this struct should be stored - // when we encounter it during unmarshaling. - unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) - u.setTag(tag, of.field, unmarshal, 0) - } - } - } - } - - // Get extension ranges, if any. - fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") - if fn.IsValid() { - if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { - panic("a message with extensions, but no extensions field in " + t.Name()) - } - u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) - } - - // Explicitly disallow tag 0. This will ensure we flag an error - // when decoding a buffer of all zeros. Without this code, we - // would decode and skip an all-zero buffer of even length. - // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. - u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { - return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) - }, 0) - - // Set mask for required field check. - u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1 - - atomic.StoreInt32(&u.initialized, 1) -} - -// setTag stores the unmarshal information for the given tag. -// tag = tag # for field -// field/unmarshal = unmarshal info for that field. -// reqMask = if required, bitmask for field position in required field list. 0 otherwise. -func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64) { - i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask} - n := u.typ.NumField() - if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? - for len(u.dense) <= tag { - u.dense = append(u.dense, unmarshalFieldInfo{}) - } - u.dense[tag] = i - return - } - if u.sparse == nil { - u.sparse = map[uint64]unmarshalFieldInfo{} - } - u.sparse[uint64(tag)] = i -} - -// fieldUnmarshaler returns an unmarshaler for the given field. -func fieldUnmarshaler(f *reflect.StructField) unmarshaler { - if f.Type.Kind() == reflect.Map { - return makeUnmarshalMap(f) - } - return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) -} - -// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. -func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { - tagArray := strings.Split(tags, ",") - encoding := tagArray[0] - name := "unknown" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Figure out packaging (pointer, slice, or both) - slice := false - pointer := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - // We'll never have both pointer and slice for basic types. - if pointer && slice && t.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + t.Name()) - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return unmarshalBoolPtr - } - if slice { - return unmarshalBoolSlice - } - return unmarshalBoolValue - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixedS32Ptr - } - if slice { - return unmarshalFixedS32Slice - } - return unmarshalFixedS32Value - case "varint": - // this could be int32 or enum - if pointer { - return unmarshalInt32Ptr - } - if slice { - return unmarshalInt32Slice - } - return unmarshalInt32Value - case "zigzag32": - if pointer { - return unmarshalSint32Ptr - } - if slice { - return unmarshalSint32Slice - } - return unmarshalSint32Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixedS64Ptr - } - if slice { - return unmarshalFixedS64Slice - } - return unmarshalFixedS64Value - case "varint": - if pointer { - return unmarshalInt64Ptr - } - if slice { - return unmarshalInt64Slice - } - return unmarshalInt64Value - case "zigzag64": - if pointer { - return unmarshalSint64Ptr - } - if slice { - return unmarshalSint64Slice - } - return unmarshalSint64Value - } - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixed32Ptr - } - if slice { - return unmarshalFixed32Slice - } - return unmarshalFixed32Value - case "varint": - if pointer { - return unmarshalUint32Ptr - } - if slice { - return unmarshalUint32Slice - } - return unmarshalUint32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixed64Ptr - } - if slice { - return unmarshalFixed64Slice - } - return unmarshalFixed64Value - case "varint": - if pointer { - return unmarshalUint64Ptr - } - if slice { - return unmarshalUint64Slice - } - return unmarshalUint64Value - } - case reflect.Float32: - if pointer { - return unmarshalFloat32Ptr - } - if slice { - return unmarshalFloat32Slice - } - return unmarshalFloat32Value - case reflect.Float64: - if pointer { - return unmarshalFloat64Ptr - } - if slice { - return unmarshalFloat64Slice - } - return unmarshalFloat64Value - case reflect.Map: - panic("map type in typeUnmarshaler in " + t.Name()) - case reflect.Slice: - if pointer { - panic("bad pointer in slice case in " + t.Name()) - } - if slice { - return unmarshalBytesSlice - } - return unmarshalBytesValue - case reflect.String: - if pointer { - return unmarshalStringPtr - } - if slice { - return unmarshalStringSlice - } - return unmarshalStringValue - case reflect.Struct: - // message or group field - if !pointer { - panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) - } - switch encoding { - case "bytes": - if slice { - return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) - case "group": - if slice { - return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) - } - } - panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) -} - -// Below are all the unmarshalers for individual fields of various types. - -func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64() = v - return b, nil -} - -func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64() = v - return b, nil -} - -func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64() = v - return b, nil -} - -func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64Ptr() = &v - return b, nil -} - -func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - *f.toInt32() = v - return b, nil -} - -func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - *f.toInt32() = v - return b, nil -} - -func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32() = v - return b, nil -} - -func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32Ptr() = &v - return b, nil -} - -func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64() = v - return b[8:], nil -} - -func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64() = v - return b[8:], nil -} - -func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32() = v - return b[4:], nil -} - -func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32Ptr() = &v - return b[4:], nil -} - -func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - *f.toInt32() = v - return b[4:], nil -} - -func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.setInt32Ptr(v) - return b[4:], nil -} - -func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - return b[4:], nil -} - -func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - // Note: any length varint is allowed, even though any sane - // encoder will use one byte. - // See https://github.com/golang/protobuf/issues/76 - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - // TODO: check if x>1? Tests seem to indicate no. - v := x != 0 - *f.toBool() = v - return b[n:], nil -} - -func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - *f.toBoolPtr() = &v - return b[n:], nil -} - -func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - b = b[n:] - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - return b[n:], nil -} - -func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64() = v - return b[8:], nil -} - -func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64Ptr() = &v - return b[8:], nil -} - -func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32() = v - return b[4:], nil -} - -func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32Ptr() = &v - return b[4:], nil -} - -func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - *f.toString() = v - return b[x:], nil -} - -func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - *f.toStringPtr() = &v - return b[x:], nil -} - -func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - s := f.toStringSlice() - *s = append(*s, v) - return b[x:], nil -} - -var emptyBuf [0]byte - -func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // The use of append here is a trick which avoids the zeroing - // that would be required if we used a make/copy pair. - // We append to emptyBuf instead of nil because we want - // a non-nil result even when the length is 0. - v := append(emptyBuf[:], b[:x]...) - *f.toBytes() = v - return b[x:], nil -} - -func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := append(emptyBuf[:], b[:x]...) - s := f.toBytesSlice() - *s = append(*s, v) - return b[x:], nil -} - -func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // First read the message field to see if something is there. - // The semantics of multiple submessages are weird. Instead of - // the last one winning (as it is for all other fields), multiple - // submessages are merged. - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[x:], err - } -} - -func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[x:], err - } -} - -func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[y:], err - } -} - -func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[y:], err - } -} - -func makeUnmarshalMap(f *reflect.StructField) unmarshaler { - t := f.Type - kt := t.Key() - vt := t.Elem() - unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) - unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) - return func(b []byte, f pointer, w int) ([]byte, error) { - // The map entry is a submessage. Figure out how big it is. - if w != WireBytes { - return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - r := b[x:] // unused data to return - b = b[:x] // data for map entry - - // Note: we could use #keys * #values ~= 200 functions - // to do map decoding without reflection. Probably not worth it. - // Maps will be somewhat slow. Oh well. - - // Read key and value from data. - k := reflect.New(kt) - v := reflect.New(vt) - for len(b) > 0 { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - wire := int(x) & 7 - b = b[n:] - - var err error - switch x >> 3 { - case 1: - b, err = unmarshalKey(b, valToPointer(k), wire) - case 2: - b, err = unmarshalVal(b, valToPointer(v), wire) - default: - err = errInternalBadWireType // skip unknown tag - } - - if err == nil { - continue - } - if err != errInternalBadWireType { - return nil, err - } - - // Skip past unknown fields. - b, err = skipField(b, wire) - if err != nil { - return nil, err - } - } - - // Get map, allocate if needed. - m := f.asPointerTo(t).Elem() // an addressable map[K]T - if m.IsNil() { - m.Set(reflect.MakeMap(t)) - } - - // Insert into map. - m.SetMapIndex(k.Elem(), v.Elem()) - - return r, nil - } -} - -// makeUnmarshalOneof makes an unmarshaler for oneof fields. -// for: -// message Msg { -// oneof F { -// int64 X = 1; -// float64 Y = 2; -// } -// } -// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). -// ityp is the interface type of the oneof field (e.g. isMsg_F). -// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). -// Note that this function will be called once for each case in the oneof. -func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { - sf := typ.Field(0) - field0 := toField(&sf) - return func(b []byte, f pointer, w int) ([]byte, error) { - // Allocate holder for value. - v := reflect.New(typ) - - // Unmarshal data into holder. - // We unmarshal into the first field of the holder object. - var err error - b, err = unmarshal(b, valToPointer(v).offset(field0), w) - if err != nil { - return nil, err - } - - // Write pointer to holder into target field. - f.asPointerTo(ityp).Elem().Set(v) - - return b, nil - } -} - -// Error used by decode internally. -var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") - -// skipField skips past a field of type wire and returns the remaining bytes. -func skipField(b []byte, wire int) ([]byte, error) { - switch wire { - case WireVarint: - _, k := decodeVarint(b) - if k == 0 { - return b, io.ErrUnexpectedEOF - } - b = b[k:] - case WireFixed32: - if len(b) < 4 { - return b, io.ErrUnexpectedEOF - } - b = b[4:] - case WireFixed64: - if len(b) < 8 { - return b, io.ErrUnexpectedEOF - } - b = b[8:] - case WireBytes: - m, k := decodeVarint(b) - if k == 0 || uint64(len(b)-k) < m { - return b, io.ErrUnexpectedEOF - } - b = b[uint64(k)+m:] - case WireStartGroup: - _, i := findEndGroup(b) - if i == -1 { - return b, io.ErrUnexpectedEOF - } - b = b[i:] - default: - return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) - } - return b, nil -} - -// findEndGroup finds the index of the next EndGroup tag. -// Groups may be nested, so the "next" EndGroup tag is the first -// unpaired EndGroup. -// findEndGroup returns the indexes of the start and end of the EndGroup tag. -// Returns (-1,-1) if it can't find one. -func findEndGroup(b []byte) (int, int) { - depth := 1 - i := 0 - for { - x, n := decodeVarint(b[i:]) - if n == 0 { - return -1, -1 - } - j := i - i += n - switch x & 7 { - case WireVarint: - _, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - case WireFixed32: - if len(b)-4 < i { - return -1, -1 - } - i += 4 - case WireFixed64: - if len(b)-8 < i { - return -1, -1 - } - i += 8 - case WireBytes: - m, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - if uint64(len(b)-i) < m { - return -1, -1 - } - i += int(m) - case WireStartGroup: - depth++ - case WireEndGroup: - depth-- - if depth == 0 { - return j, i - } - default: - return -1, -1 - } - } -} - -// encodeVarint appends a varint-encoded integer to b and returns the result. -func encodeVarint(b []byte, x uint64) []byte { - for x >= 1<<7 { - b = append(b, byte(x&0x7f|0x80)) - x >>= 7 - } - return append(b, byte(x)) -} - -// decodeVarint reads a varint-encoded integer from b. -// Returns the decoded integer and the number of bytes read. -// If there is an error, it returns 0,0. -func decodeVarint(b []byte) (uint64, int) { - var x, y uint64 - if len(b) <= 0 { - goto bad - } - x = uint64(b[0]) - if x < 0x80 { - return x, 1 - } - x -= 0x80 - - if len(b) <= 1 { - goto bad - } - y = uint64(b[1]) - x += y << 7 - if y < 0x80 { - return x, 2 - } - x -= 0x80 << 7 - - if len(b) <= 2 { - goto bad - } - y = uint64(b[2]) - x += y << 14 - if y < 0x80 { - return x, 3 - } - x -= 0x80 << 14 - - if len(b) <= 3 { - goto bad - } - y = uint64(b[3]) - x += y << 21 - if y < 0x80 { - return x, 4 - } - x -= 0x80 << 21 - - if len(b) <= 4 { - goto bad - } - y = uint64(b[4]) - x += y << 28 - if y < 0x80 { - return x, 5 - } - x -= 0x80 << 28 - - if len(b) <= 5 { - goto bad - } - y = uint64(b[5]) - x += y << 35 - if y < 0x80 { - return x, 6 - } - x -= 0x80 << 35 - - if len(b) <= 6 { - goto bad - } - y = uint64(b[6]) - x += y << 42 - if y < 0x80 { - return x, 7 - } - x -= 0x80 << 42 - - if len(b) <= 7 { - goto bad - } - y = uint64(b[7]) - x += y << 49 - if y < 0x80 { - return x, 8 - } - x -= 0x80 << 49 - - if len(b) <= 8 { - goto bad - } - y = uint64(b[8]) - x += y << 56 - if y < 0x80 { - return x, 9 - } - x -= 0x80 << 56 - - if len(b) <= 9 { - goto bad - } - y = uint64(b[9]) - x += y << 63 - if y < 2 { - return x, 10 - } - -bad: - return 0, 0 -} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go index 2205fda..965876b 100644 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ b/vendor/github.com/golang/protobuf/proto/text.go @@ -50,6 +50,7 @@ import ( var ( newline = []byte("\n") spaces = []byte(" ") + gtNewline = []byte(">\n") endBraceNewline = []byte("}\n") backslashN = []byte{'\\', 'n'} backslashR = []byte{'\\', 'r'} @@ -169,6 +170,11 @@ func writeName(w *textWriter, props *Properties) error { return nil } +// raw is the interface satisfied by RawMessage. +type raw interface { + Bytes() []byte +} + func requiresQuotes(u string) bool { // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. for _, ch := range u { @@ -263,10 +269,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { props := sprops.Prop[i] name := st.Field(i).Name - if name == "XXX_NoUnkeyedLiteral" { - continue - } - if strings.HasPrefix(name, "XXX_") { // There are two XXX_ fields: // XXX_unrecognized []byte @@ -434,6 +436,12 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return err } } + if b, ok := fv.Interface().(raw); ok { + if err := writeRaw(w, b.Bytes()); err != nil { + return err + } + continue + } // Enums have a String method, so writeAny will work fine. if err := tm.writeAny(w, fv, props); err != nil { @@ -447,7 +455,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { // Extensions (the XXX_extensions field). pv := sv.Addr() - if _, err := extendable(pv.Interface()); err == nil { + if _, ok := extendable(pv.Interface()); ok { if err := tm.writeExtensions(w, pv); err != nil { return err } @@ -456,6 +464,27 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return nil } +// writeRaw writes an uninterpreted raw message. +func writeRaw(w *textWriter, b []byte) error { + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if err := writeUnknownStruct(w, b); err != nil { + return err + } + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + return nil +} + // writeAny writes an arbitrary field. func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { v = reflect.Indirect(v) @@ -506,19 +535,6 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert } } w.indent() - if v.CanAddr() { - // Calling v.Interface on a struct causes the reflect package to - // copy the entire struct. This is racy with the new Marshaler - // since we atomically update the XXX_sizecache. - // - // Thus, we retrieve a pointer to the struct if possible to avoid - // a race since v.Interface on the pointer doesn't copy the struct. - // - // If v is not addressable, then we are not worried about a race - // since it implies that the binary Marshaler cannot possibly be - // mutating this value. - v = v.Addr() - } if etm, ok := v.Interface().(encoding.TextMarshaler); ok { text, err := etm.MarshalText() if err != nil { @@ -527,13 +543,8 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert if _, err = w.Write(text); err != nil { return err } - } else { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if err := tm.writeStruct(w, v); err != nil { - return err - } + } else if err := tm.writeStruct(w, v); err != nil { + return err } w.unindent() if err := w.WriteByte(ket); err != nil { diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 0685bae..5e14513 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -206,6 +206,7 @@ func (p *textParser) advance() { var ( errBadUTF8 = errors.New("proto: bad UTF-8") + errBadHex = errors.New("proto: bad hexadecimal") ) func unquoteC(s string, quote rune) (string, error) { @@ -276,47 +277,60 @@ func unescape(s string) (ch string, tail string, err error) { return "?", s, nil // trigraph workaround case '\'', '"', '\\': return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7': + case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X': if len(s) < 2 { return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) } - ss := string(r) + s[:2] + base := 8 + ss := s[:2] s = s[2:] - i, err := strconv.ParseUint(ss, 8, 8) + if r == 'x' || r == 'X' { + base = 16 + } else { + ss = string(r) + ss + } + i, err := strconv.ParseUint(ss, base, 8) if err != nil { - return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) + return "", "", err } return string([]byte{byte(i)}), s, nil - case 'x', 'X', 'u', 'U': - var n int - switch r { - case 'x', 'X': - n = 2 - case 'u': - n = 4 - case 'U': + case 'u', 'U': + n := 4 + if r == 'U' { n = 8 } if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) - } - ss := s[:n] - s = s[n:] - i, err := strconv.ParseUint(ss, 16, 64) - if err != nil { - return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + return "", "", fmt.Errorf(`\%c requires %d digits`, r, n) } - if r == 'x' || r == 'X' { - return string([]byte{byte(i)}), s, nil - } - if i > utf8.MaxRune { - return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + + bs := make([]byte, n/2) + for i := 0; i < n; i += 2 { + a, ok1 := unhex(s[i]) + b, ok2 := unhex(s[i+1]) + if !ok1 || !ok2 { + return "", "", errBadHex + } + bs[i/2] = a<<4 | b } - return string(i), s, nil + s = s[n:] + return string(bs), s, nil } return "", "", fmt.Errorf(`unknown escape \%c`, r) } +// Adapted from src/pkg/strconv/quote.go. +func unhex(b byte) (v byte, ok bool) { + switch { + case '0' <= b && b <= '9': + return b - '0', true + case 'a' <= b && b <= 'f': + return b - 'a' + 10, true + case 'A' <= b && b <= 'F': + return b - 'A' + 10, true + } + return 0, false +} + // Back off the parser by one token. Can only be done between calls to next(). // It makes the next advance() a no-op. func (p *textParser) back() { p.backed = true } @@ -714,9 +728,6 @@ func (p *textParser) consumeExtName() (string, error) { if tok.err != nil { return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) } - if p.done && tok.value != "]" { - return "", p.errorf("unclosed type_url or extension name") - } } return strings.Join(parts, ""), nil } @@ -854,7 +865,7 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { return p.readStruct(fv, terminator) case reflect.Uint32: if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) + fv.SetUint(x) return nil } case reflect.Uint64: @@ -872,9 +883,13 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { // UnmarshalText returns *RequiredNotSetError. func UnmarshalText(s string, pb Message) error { if um, ok := pb.(encoding.TextUnmarshaler); ok { - return um.UnmarshalText([]byte(s)) + err := um.UnmarshalText([]byte(s)) + return err } pb.Reset() v := reflect.ValueOf(pb) - return newTextParser(s).readStruct(v.Elem(), "") + if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil { + return pe + } + return nil } diff --git a/vendor/github.com/miekg/dns/AUTHORS b/vendor/github.com/miekg/dns/AUTHORS new file mode 100644 index 0000000..1965683 --- /dev/null +++ b/vendor/github.com/miekg/dns/AUTHORS @@ -0,0 +1 @@ +Miek Gieben <miek@miek.nl> diff --git a/vendor/github.com/miekg/dns/CONTRIBUTORS b/vendor/github.com/miekg/dns/CONTRIBUTORS new file mode 100644 index 0000000..f77e8a8 --- /dev/null +++ b/vendor/github.com/miekg/dns/CONTRIBUTORS @@ -0,0 +1,9 @@ +Alex A. Skinner +Andrew Tunnell-Jones +Ask Bjørn Hansen +Dave Cheney +Dusty Wilson +Marek Majkowski +Peter van Dijk +Omri Bahumi +Alex Sergeyev diff --git a/vendor/github.com/miekg/dns/COPYRIGHT b/vendor/github.com/miekg/dns/COPYRIGHT new file mode 100644 index 0000000..35702b1 --- /dev/null +++ b/vendor/github.com/miekg/dns/COPYRIGHT @@ -0,0 +1,9 @@ +Copyright 2009 The Go Authors. All rights reserved. Use of this source code +is governed by a BSD-style license that can be found in the LICENSE file. +Extensions of the original work are copyright (c) 2011 Miek Gieben + +Copyright 2011 Miek Gieben. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. + +Copyright 2014 CloudFlare. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. diff --git a/vendor/github.com/miekg/dns/LICENSE b/vendor/github.com/miekg/dns/LICENSE new file mode 100644 index 0000000..5763fa7 --- /dev/null +++ b/vendor/github.com/miekg/dns/LICENSE @@ -0,0 +1,32 @@ +Extensions of the original work are copyright (c) 2011 Miek Gieben + +As this is fork of the official Go code the same license applies: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/miekg/dns/README.md b/vendor/github.com/miekg/dns/README.md new file mode 100644 index 0000000..744e20d --- /dev/null +++ b/vendor/github.com/miekg/dns/README.md @@ -0,0 +1,149 @@ +[](https://travis-ci.org/miekg/dns) + +# Alternative (more granular) approach to a DNS library + +> Less is more. + +Complete and usable DNS library. All widely used Resource Records are +supported, including the DNSSEC types. It follows a lean and mean philosophy. +If there is stuff you should know as a DNS programmer there isn't a convenience +function for it. Server side and client side programming is supported, i.e. you +can build servers and resolvers with it. + +If you like this, you may also be interested in: + +* https://github.com/miekg/unbound -- Go wrapper for the Unbound resolver. + +# Goals + +* KISS; +* Fast; +* Small API, if its easy to code in Go, don't make a function for it. + +# Users + +A not-so-up-to-date-list-that-may-be-actually-current: + +* https://cloudflare.com +* https://github.com/abh/geodns +* http://www.statdns.com/ +* http://www.dnsinspect.com/ +* https://github.com/chuangbo/jianbing-dictionary-dns +* http://www.dns-lg.com/ +* https://github.com/fcambus/rrda +* https://github.com/kenshinx/godns +* https://github.com/skynetservices/skydns +* https://github.com/DevelopersPL/godnsagent +* https://github.com/duedil-ltd/discodns +* https://github.com/StalkR/dns-reverse-proxy +* https://github.com/tianon/rawdns +* https://mesosphere.github.io/mesos-dns/ +* https://pulse.turbobytes.com/ +* https://play.google.com/store/apps/details?id=com.turbobytes.dig +* https://github.com/fcambus/statzone +* https://github.com/benschw/dns-clb-go +* https://github.com/corny/dnscheck for http://public-dns.tk/ + +Send pull request if you want to be listed here. + +# Features + +* UDP/TCP queries, IPv4 and IPv6; +* RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported; +* Fast: + * Reply speed around ~ 80K qps (faster hardware results in more qps); + * Parsing RRs ~ 100K RR/s, that's 5M records in about 50 seconds; +* Server side programming (mimicking the net/http package); +* Client side programming; +* DNSSEC: signing, validating and key generation for DSA, RSA and ECDSA; +* EDNS0, NSID; +* AXFR/IXFR; +* TSIG, SIG(0); +* DNS name compression; +* Depends only on the standard library. + +Have fun! + +Miek Gieben - 2010-2012 - <miek@miek.nl> + +# Building + +Building is done with the `go` tool. If you have setup your GOPATH +correctly, the following should work: + + go get github.com/miekg/dns + go build github.com/miekg/dns + +## Examples + +A short "how to use the API" is at the beginning of doc.go (this also will show +when you call `godoc github.com/miekg/dns`). + +Example programs can be found in the `github.com/miekg/exdns` repository. + +## Supported RFCs + +*all of them* + +* 103{4,5} - DNS standard +* 1348 - NSAP record (removed the record) +* 1982 - Serial Arithmetic +* 1876 - LOC record +* 1995 - IXFR +* 1996 - DNS notify +* 2136 - DNS Update (dynamic updates) +* 2181 - RRset definition - there is no RRset type though, just []RR +* 2537 - RSAMD5 DNS keys +* 2065 - DNSSEC (updated in later RFCs) +* 2671 - EDNS record +* 2782 - SRV record +* 2845 - TSIG record +* 2915 - NAPTR record +* 2929 - DNS IANA Considerations +* 3110 - RSASHA1 DNS keys +* 3225 - DO bit (DNSSEC OK) +* 340{1,2,3} - NAPTR record +* 3445 - Limiting the scope of (DNS)KEY +* 3597 - Unknown RRs +* 4025 - IPSECKEY +* 403{3,4,5} - DNSSEC + validation functions +* 4255 - SSHFP record +* 4343 - Case insensitivity +* 4408 - SPF record +* 4509 - SHA256 Hash in DS +* 4592 - Wildcards in the DNS +* 4635 - HMAC SHA TSIG +* 4701 - DHCID +* 4892 - id.server +* 5001 - NSID +* 5155 - NSEC3 record +* 5205 - HIP record +* 5702 - SHA2 in the DNS +* 5936 - AXFR +* 5966 - TCP implementation recommendations +* 6605 - ECDSA +* 6725 - IANA Registry Update +* 6742 - ILNP DNS +* 6844 - CAA record +* 6891 - EDNS0 update +* 6895 - DNS IANA considerations +* 6975 - Algorithm Understanding in DNSSEC +* 7043 - EUI48/EUI64 records +* 7314 - DNS (EDNS) EXPIRE Option +* 7553 - URI record +* xxxx - EDNS0 DNS Update Lease (draft) + +## Loosely based upon + +* `ldns` +* `NSD` +* `Net::DNS` +* `GRONG` + +## TODO + +* privatekey.Precompute() when signing? +* Last remaining RRs: APL, ATMA, A6, NSAP and NXT. +* Missing in parsing: ISDN, UNSPEC, NSAP and ATMA. +* NSEC(3) cover/match/closest enclose. +* Replies with TC bit are not parsed to the end. diff --git a/vendor/github.com/miekg/dns/client.go b/vendor/github.com/miekg/dns/client.go new file mode 100644 index 0000000..ea09851 --- /dev/null +++ b/vendor/github.com/miekg/dns/client.go @@ -0,0 +1,378 @@ +package dns + +// A client implementation. + +import ( + "bytes" + "io" + "net" + "time" +) + +const dnsTimeout time.Duration = 2 * time.Second +const tcpIdleTimeout time.Duration = 8 * time.Second + +// A Conn represents a connection to a DNS server. +type Conn struct { + net.Conn // a net.Conn holding the connection + UDPSize uint16 // minimum receive buffer for UDP messages + TsigSecret map[string]string // secret(s) for Tsig map[<zonename>]<base64 secret>, zonename must be fully qualified + rtt time.Duration + t time.Time + tsigRequestMAC string +} + +// A Client defines parameters for a DNS client. +type Client struct { + Net string // if "tcp" a TCP query will be initiated, otherwise an UDP one (default is "" for UDP) + UDPSize uint16 // minimum receive buffer for UDP messages + DialTimeout time.Duration // net.DialTimeout, defaults to 2 seconds + ReadTimeout time.Duration // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds + WriteTimeout time.Duration // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds + TsigSecret map[string]string // secret(s) for Tsig map[<zonename>]<base64 secret>, zonename must be fully qualified + SingleInflight bool // if true suppress multiple outstanding queries for the same Qname, Qtype and Qclass + group singleflight +} + +// Exchange performs a synchronous UDP query. It sends the message m to the address +// contained in a and waits for an reply. Exchange does not retry a failed query, nor +// will it fall back to TCP in case of truncation. +// If you need to send a DNS message on an already existing connection, you can use the +// following: +// +// co := &dns.Conn{Conn: c} // c is your net.Conn +// co.WriteMsg(m) +// in, err := co.ReadMsg() +// co.Close() +// +func Exchange(m *Msg, a string) (r *Msg, err error) { + var co *Conn + co, err = DialTimeout("udp", a, dnsTimeout) + if err != nil { + return nil, err + } + + defer co.Close() + co.SetReadDeadline(time.Now().Add(dnsTimeout)) + co.SetWriteDeadline(time.Now().Add(dnsTimeout)) + + opt := m.IsEdns0() + // If EDNS0 is used use that for size. + if opt != nil && opt.UDPSize() >= MinMsgSize { + co.UDPSize = opt.UDPSize() + } + + if err = co.WriteMsg(m); err != nil { + return nil, err + } + r, err = co.ReadMsg() + if err == nil && r.Id != m.Id { + err = ErrId + } + return r, err +} + +// ExchangeConn performs a synchronous query. It sends the message m via the connection +// c and waits for a reply. The connection c is not closed by ExchangeConn. +// This function is going away, but can easily be mimicked: +// +// co := &dns.Conn{Conn: c} // c is your net.Conn +// co.WriteMsg(m) +// in, _ := co.ReadMsg() +// co.Close() +// +func ExchangeConn(c net.Conn, m *Msg) (r *Msg, err error) { + println("dns: this function is deprecated") + co := new(Conn) + co.Conn = c + if err = co.WriteMsg(m); err != nil { + return nil, err + } + r, err = co.ReadMsg() + if err == nil && r.Id != m.Id { + err = ErrId + } + return r, err +} + +// Exchange performs an synchronous query. It sends the message m to the address +// contained in a and waits for an reply. Basic use pattern with a *dns.Client: +// +// c := new(dns.Client) +// in, rtt, err := c.Exchange(message, "127.0.0.1:53") +// +// Exchange does not retry a failed query, nor will it fall back to TCP in +// case of truncation. +func (c *Client) Exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) { + if !c.SingleInflight { + return c.exchange(m, a) + } + // This adds a bunch of garbage, TODO(miek). + t := "nop" + if t1, ok := TypeToString[m.Question[0].Qtype]; ok { + t = t1 + } + cl := "nop" + if cl1, ok := ClassToString[m.Question[0].Qclass]; ok { + cl = cl1 + } + r, rtt, err, shared := c.group.Do(m.Question[0].Name+t+cl, func() (*Msg, time.Duration, error) { + return c.exchange(m, a) + }) + if err != nil { + return r, rtt, err + } + if shared { + return r.Copy(), rtt, nil + } + return r, rtt, nil +} + +func (c *Client) dialTimeout() time.Duration { + if c.DialTimeout != 0 { + return c.DialTimeout + } + return dnsTimeout +} + +func (c *Client) readTimeout() time.Duration { + if c.ReadTimeout != 0 { + return c.ReadTimeout + } + return dnsTimeout +} + +func (c *Client) writeTimeout() time.Duration { + if c.WriteTimeout != 0 { + return c.WriteTimeout + } + return dnsTimeout +} + +func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) { + var co *Conn + if c.Net == "" { + co, err = DialTimeout("udp", a, c.dialTimeout()) + } else { + co, err = DialTimeout(c.Net, a, c.dialTimeout()) + } + if err != nil { + return nil, 0, err + } + defer co.Close() + + opt := m.IsEdns0() + // If EDNS0 is used use that for size. + if opt != nil && opt.UDPSize() >= MinMsgSize { + co.UDPSize = opt.UDPSize() + } + // Otherwise use the client's configured UDP size. + if opt == nil && c.UDPSize >= MinMsgSize { + co.UDPSize = c.UDPSize + } + + co.SetReadDeadline(time.Now().Add(c.readTimeout())) + co.SetWriteDeadline(time.Now().Add(c.writeTimeout())) + + co.TsigSecret = c.TsigSecret + if err = co.WriteMsg(m); err != nil { + return nil, 0, err + } + r, err = co.ReadMsg() + if err == nil && r.Id != m.Id { + err = ErrId + } + return r, co.rtt, err +} + +// ReadMsg reads a message from the connection co. +// If the received message contains a TSIG record the transaction +// signature is verified. +func (co *Conn) ReadMsg() (*Msg, error) { + p, err := co.ReadMsgHeader(nil) + if err != nil { + return nil, err + } + + m := new(Msg) + if err := m.Unpack(p); err != nil { + return nil, err + } + if t := m.IsTsig(); t != nil { + if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { + return m, ErrSecret + } + // Need to work on the original message p, as that was used to calculate the tsig. + err = TsigVerify(p, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) + } + return m, err +} + +// ReadMsgHeader reads a DNS message, parses and populates hdr (when hdr is not nil). +// Returns message as a byte slice to be parsed with Msg.Unpack later on. +// Note that error handling on the message body is not possible as only the header is parsed. +func (co *Conn) ReadMsgHeader(hdr *Header) ([]byte, error) { + var ( + p []byte + n int + err error + ) + + if t, ok := co.Conn.(*net.TCPConn); ok { + // First two bytes specify the length of the entire message. + l, err := tcpMsgLen(t) + if err != nil { + return nil, err + } + p = make([]byte, l) + n, err = tcpRead(t, p) + } else { + if co.UDPSize > MinMsgSize { + p = make([]byte, co.UDPSize) + } else { + p = make([]byte, MinMsgSize) + } + n, err = co.Read(p) + } + + if err != nil { + return nil, err + } else if n < headerSize { + return nil, ErrShortRead + } + + p = p[:n] + if hdr != nil { + if _, err = UnpackStruct(hdr, p, 0); err != nil { + return nil, err + } + } + return p, err +} + +// tcpMsgLen is a helper func to read first two bytes of stream as uint16 packet length. +func tcpMsgLen(t *net.TCPConn) (int, error) { + p := []byte{0, 0} + n, err := t.Read(p) + if err != nil { + return 0, err + } + if n != 2 { + return 0, ErrShortRead + } + l, _ := unpackUint16(p, 0) + if l == 0 { + return 0, ErrShortRead + } + return int(l), nil +} + +// tcpRead calls TCPConn.Read enough times to fill allocated buffer. +func tcpRead(t *net.TCPConn, p []byte) (int, error) { + n, err := t.Read(p) + if err != nil { + return n, err + } + for n < len(p) { + j, err := t.Read(p[n:]) + if err != nil { + return n, err + } + n += j + } + return n, err +} + +// Read implements the net.Conn read method. +func (co *Conn) Read(p []byte) (n int, err error) { + if co.Conn == nil { + return 0, ErrConnEmpty + } + if len(p) < 2 { + return 0, io.ErrShortBuffer + } + if t, ok := co.Conn.(*net.TCPConn); ok { + l, err := tcpMsgLen(t) + if err != nil { + return 0, err + } + if l > len(p) { + return int(l), io.ErrShortBuffer + } + return tcpRead(t, p[:l]) + } + // UDP connection + n, err = co.Conn.Read(p) + if err != nil { + return n, err + } + + co.rtt = time.Since(co.t) + return n, err +} + +// WriteMsg sends a message throught the connection co. +// If the message m contains a TSIG record the transaction +// signature is calculated. +func (co *Conn) WriteMsg(m *Msg) (err error) { + var out []byte + if t := m.IsTsig(); t != nil { + mac := "" + if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { + return ErrSecret + } + out, mac, err = TsigGenerate(m, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) + // Set for the next read, allthough only used in zone transfers + co.tsigRequestMAC = mac + } else { + out, err = m.Pack() + } + if err != nil { + return err + } + co.t = time.Now() + if _, err = co.Write(out); err != nil { + return err + } + return nil +} + +// Write implements the net.Conn Write method. +func (co *Conn) Write(p []byte) (n int, err error) { + if t, ok := co.Conn.(*net.TCPConn); ok { + lp := len(p) + if lp < 2 { + return 0, io.ErrShortBuffer + } + if lp > MaxMsgSize { + return 0, &Error{err: "message too large"} + } + l := make([]byte, 2, lp+2) + l[0], l[1] = packUint16(uint16(lp)) + p = append(l, p...) + n, err := io.Copy(t, bytes.NewReader(p)) + return int(n), err + } + n, err = co.Conn.(*net.UDPConn).Write(p) + return n, err +} + +// Dial connects to the address on the named network. +func Dial(network, address string) (conn *Conn, err error) { + conn = new(Conn) + conn.Conn, err = net.Dial(network, address) + if err != nil { + return nil, err + } + return conn, nil +} + +// DialTimeout acts like Dial but takes a timeout. +func DialTimeout(network, address string, timeout time.Duration) (conn *Conn, err error) { + conn = new(Conn) + conn.Conn, err = net.DialTimeout(network, address, timeout) + if err != nil { + return nil, err + } + return conn, nil +} diff --git a/vendor/github.com/miekg/dns/clientconfig.go b/vendor/github.com/miekg/dns/clientconfig.go new file mode 100644 index 0000000..cfa9ad0 --- /dev/null +++ b/vendor/github.com/miekg/dns/clientconfig.go @@ -0,0 +1,99 @@ +package dns + +import ( + "bufio" + "os" + "strconv" + "strings" +) + +// ClientConfig wraps the contents of the /etc/resolv.conf file. +type ClientConfig struct { + Servers []string // servers to use + Search []string // suffixes to append to local name + Port string // what port to use + Ndots int // number of dots in name to trigger absolute lookup + Timeout int // seconds before giving up on packet + Attempts int // lost packets before giving up on server, not used in the package dns +} + +// ClientConfigFromFile parses a resolv.conf(5) like file and returns +// a *ClientConfig. +func ClientConfigFromFile(resolvconf string) (*ClientConfig, error) { + file, err := os.Open(resolvconf) + if err != nil { + return nil, err + } + defer file.Close() + c := new(ClientConfig) + scanner := bufio.NewScanner(file) + c.Servers = make([]string, 0) + c.Search = make([]string, 0) + c.Port = "53" + c.Ndots = 1 + c.Timeout = 5 + c.Attempts = 2 + + for scanner.Scan() { + if err := scanner.Err(); err != nil { + return nil, err + } + line := scanner.Text() + f := strings.Fields(line) + if len(f) < 1 { + continue + } + switch f[0] { + case "nameserver": // add one name server + if len(f) > 1 { + // One more check: make sure server name is + // just an IP address. Otherwise we need DNS + // to look it up. + name := f[1] + c.Servers = append(c.Servers, name) + } + + case "domain": // set search path to just this domain + if len(f) > 1 { + c.Search = make([]string, 1) + c.Search[0] = f[1] + } else { + c.Search = make([]string, 0) + } + + case "search": // set search path to given servers + c.Search = make([]string, len(f)-1) + for i := 0; i < len(c.Search); i++ { + c.Search[i] = f[i+1] + } + + case "options": // magic options + for i := 1; i < len(f); i++ { + s := f[i] + switch { + case len(s) >= 6 && s[:6] == "ndots:": + n, _ := strconv.Atoi(s[6:]) + if n < 1 { + n = 1 + } + c.Ndots = n + case len(s) >= 8 && s[:8] == "timeout:": + n, _ := strconv.Atoi(s[8:]) + if n < 1 { + n = 1 + } + c.Timeout = n + case len(s) >= 8 && s[:9] == "attempts:": + n, _ := strconv.Atoi(s[9:]) + if n < 1 { + n = 1 + } + c.Attempts = n + case s == "rotate": + /* not imp */ + } + } + } + } + return c, nil +} diff --git a/vendor/github.com/miekg/dns/defaults.go b/vendor/github.com/miekg/dns/defaults.go new file mode 100644 index 0000000..63165b4 --- /dev/null +++ b/vendor/github.com/miekg/dns/defaults.go @@ -0,0 +1,278 @@ +package dns + +import ( + "errors" + "net" + "strconv" +) + +const hexDigit = "0123456789abcdef" + +// Everything is assumed in ClassINET. + +// SetReply creates a reply message from a request message. +func (dns *Msg) SetReply(request *Msg) *Msg { + dns.Id = request.Id + dns.RecursionDesired = request.RecursionDesired // Copy rd bit + dns.Response = true + dns.Opcode = OpcodeQuery + dns.Rcode = RcodeSuccess + if len(request.Question) > 0 { + dns.Question = make([]Question, 1) + dns.Question[0] = request.Question[0] + } + return dns +} + +// SetQuestion creates a question message, it sets the Question +// section, generates an Id and sets the RecursionDesired (RD) +// bit to true. +func (dns *Msg) SetQuestion(z string, t uint16) *Msg { + dns.Id = Id() + dns.RecursionDesired = true + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, t, ClassINET} + return dns +} + +// SetNotify creates a notify message, it sets the Question +// section, generates an Id and sets the Authoritative (AA) +// bit to true. +func (dns *Msg) SetNotify(z string) *Msg { + dns.Opcode = OpcodeNotify + dns.Authoritative = true + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeSOA, ClassINET} + return dns +} + +// SetRcode creates an error message suitable for the request. +func (dns *Msg) SetRcode(request *Msg, rcode int) *Msg { + dns.SetReply(request) + dns.Rcode = rcode + return dns +} + +// SetRcodeFormatError creates a message with FormError set. +func (dns *Msg) SetRcodeFormatError(request *Msg) *Msg { + dns.Rcode = RcodeFormatError + dns.Opcode = OpcodeQuery + dns.Response = true + dns.Authoritative = false + dns.Id = request.Id + return dns +} + +// SetUpdate makes the message a dynamic update message. It +// sets the ZONE section to: z, TypeSOA, ClassINET. +func (dns *Msg) SetUpdate(z string) *Msg { + dns.Id = Id() + dns.Response = false + dns.Opcode = OpcodeUpdate + dns.Compress = false // BIND9 cannot handle compression + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeSOA, ClassINET} + return dns +} + +// SetIxfr creates message for requesting an IXFR. +func (dns *Msg) SetIxfr(z string, serial uint32, ns, mbox string) *Msg { + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Ns = make([]RR, 1) + s := new(SOA) + s.Hdr = RR_Header{z, TypeSOA, ClassINET, defaultTtl, 0} + s.Serial = serial + s.Ns = ns + s.Mbox = mbox + dns.Question[0] = Question{z, TypeIXFR, ClassINET} + dns.Ns[0] = s + return dns +} + +// SetAxfr creates message for requesting an AXFR. +func (dns *Msg) SetAxfr(z string) *Msg { + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeAXFR, ClassINET} + return dns +} + +// SetTsig appends a TSIG RR to the message. +// This is only a skeleton TSIG RR that is added as the last RR in the +// additional section. The Tsig is calculated when the message is being send. +func (dns *Msg) SetTsig(z, algo string, fudge, timesigned int64) *Msg { + t := new(TSIG) + t.Hdr = RR_Header{z, TypeTSIG, ClassANY, 0, 0} + t.Algorithm = algo + t.Fudge = 300 + t.TimeSigned = uint64(timesigned) + t.OrigId = dns.Id + dns.Extra = append(dns.Extra, t) + return dns +} + +// SetEdns0 appends a EDNS0 OPT RR to the message. +// TSIG should always the last RR in a message. +func (dns *Msg) SetEdns0(udpsize uint16, do bool) *Msg { + e := new(OPT) + e.Hdr.Name = "." + e.Hdr.Rrtype = TypeOPT + e.SetUDPSize(udpsize) + if do { + e.SetDo() + } + dns.Extra = append(dns.Extra, e) + return dns +} + +// IsTsig checks if the message has a TSIG record as the last record +// in the additional section. It returns the TSIG record found or nil. +func (dns *Msg) IsTsig() *TSIG { + if len(dns.Extra) > 0 { + if dns.Extra[len(dns.Extra)-1].Header().Rrtype == TypeTSIG { + return dns.Extra[len(dns.Extra)-1].(*TSIG) + } + } + return nil +} + +// IsEdns0 checks if the message has a EDNS0 (OPT) record, any EDNS0 +// record in the additional section will do. It returns the OPT record +// found or nil. +func (dns *Msg) IsEdns0() *OPT { + for _, r := range dns.Extra { + if r.Header().Rrtype == TypeOPT { + return r.(*OPT) + } + } + return nil +} + +// IsDomainName checks if s is a valid domain name, it returns the number of +// labels and true, when a domain name is valid. Note that non fully qualified +// domain name is considered valid, in this case the last label is counted in +// the number of labels. When false is returned the number of labels is not +// defined. Also note that this function is extremely liberal; almost any +// string is a valid domain name as the DNS is 8 bit protocol. It checks if each +// label fits in 63 characters, but there is no length check for the entire +// string s. I.e. a domain name longer than 255 characters is considered valid. +func IsDomainName(s string) (labels int, ok bool) { + _, labels, err := packDomainName(s, nil, 0, nil, false) + return labels, err == nil +} + +// IsSubDomain checks if child is indeed a child of the parent. Both child and +// parent are *not* downcased before doing the comparison. +func IsSubDomain(parent, child string) bool { + // Entire child is contained in parent + return CompareDomainName(parent, child) == CountLabel(parent) +} + +// IsMsg sanity checks buf and returns an error if it isn't a valid DNS packet. +// The checking is performed on the binary payload. +func IsMsg(buf []byte) error { + // Header + if len(buf) < 12 { + return errors.New("dns: bad message header") + } + // Header: Opcode + // TODO(miek): more checks here, e.g. check all header bits. + return nil +} + +// IsFqdn checks if a domain name is fully qualified. +func IsFqdn(s string) bool { + l := len(s) + if l == 0 { + return false + } + return s[l-1] == '.' +} + +// IsRRset checks if a set of RRs is a valid RRset as defined by RFC 2181. +// This means the RRs need to have the same type, name, and class. Returns true +// if the RR set is valid, otherwise false. +func IsRRset(rrset []RR) bool { + if len(rrset) == 0 { + return false + } + if len(rrset) == 1 { + return true + } + rrHeader := rrset[0].Header() + rrType := rrHeader.Rrtype + rrClass := rrHeader.Class + rrName := rrHeader.Name + + for _, rr := range rrset[1:] { + curRRHeader := rr.Header() + if curRRHeader.Rrtype != rrType || curRRHeader.Class != rrClass || curRRHeader.Name != rrName { + // Mismatch between the records, so this is not a valid rrset for + //signing/verifying + return false + } + } + + return true +} + +// Fqdn return the fully qualified domain name from s. +// If s is already fully qualified, it behaves as the identity function. +func Fqdn(s string) string { + if IsFqdn(s) { + return s + } + return s + "." +} + +// Copied from the official Go code. + +// ReverseAddr returns the in-addr.arpa. or ip6.arpa. hostname of the IP +// address suitable for reverse DNS (PTR) record lookups or an error if it fails +// to parse the IP address. +func ReverseAddr(addr string) (arpa string, err error) { + ip := net.ParseIP(addr) + if ip == nil { + return "", &Error{err: "unrecognized address: " + addr} + } + if ip.To4() != nil { + return strconv.Itoa(int(ip[15])) + "." + strconv.Itoa(int(ip[14])) + "." + strconv.Itoa(int(ip[13])) + "." + + strconv.Itoa(int(ip[12])) + ".in-addr.arpa.", nil + } + // Must be IPv6 + buf := make([]byte, 0, len(ip)*4+len("ip6.arpa.")) + // Add it, in reverse, to the buffer + for i := len(ip) - 1; i >= 0; i-- { + v := ip[i] + buf = append(buf, hexDigit[v&0xF]) + buf = append(buf, '.') + buf = append(buf, hexDigit[v>>4]) + buf = append(buf, '.') + } + // Append "ip6.arpa." and return (buf already has the final .) + buf = append(buf, "ip6.arpa."...) + return string(buf), nil +} + +// String returns the string representation for the type t. +func (t Type) String() string { + if t1, ok := TypeToString[uint16(t)]; ok { + return t1 + } + return "TYPE" + strconv.Itoa(int(t)) +} + +// String returns the string representation for the class c. +func (c Class) String() string { + if c1, ok := ClassToString[uint16(c)]; ok { + return c1 + } + return "CLASS" + strconv.Itoa(int(c)) +} + +// String returns the string representation for the name n. +func (n Name) String() string { + return sprintName(string(n)) +} diff --git a/vendor/github.com/miekg/dns/dns.go b/vendor/github.com/miekg/dns/dns.go new file mode 100644 index 0000000..a3e4a0e --- /dev/null +++ b/vendor/github.com/miekg/dns/dns.go @@ -0,0 +1,100 @@ +package dns + +import "strconv" + +const ( + year68 = 1 << 31 // For RFC1982 (Serial Arithmetic) calculations in 32 bits. + // DefaultMsgSize is the standard default for messages larger than 512 bytes. + DefaultMsgSize = 4096 + // MinMsgSize is the minimal size of a DNS packet. + MinMsgSize = 512 + // MaxMsgSize is the largest possible DNS packet. + MaxMsgSize = 65535 + defaultTtl = 3600 // Default internal TTL. +) + +// Error represents a DNS error +type Error struct{ err string } + +func (e *Error) Error() string { + if e == nil { + return "dns: <nil>" + } + return "dns: " + e.err +} + +// An RR represents a resource record. +type RR interface { + // Header returns the header of an resource record. The header contains + // everything up to the rdata. + Header() *RR_Header + // String returns the text representation of the resource record. + String() string + // copy returns a copy of the RR + copy() RR + // len returns the length (in octets) of the uncompressed RR in wire format. + len() int +} + +// RR_Header is the header all DNS resource records share. +type RR_Header struct { + Name string `dns:"cdomain-name"` + Rrtype uint16 + Class uint16 + Ttl uint32 + Rdlength uint16 // length of data after header +} + +// Header returns itself. This is here to make RR_Header implement the RR interface. +func (h *RR_Header) Header() *RR_Header { return h } + +// Just to imlement the RR interface. +func (h *RR_Header) copy() RR { return nil } + +func (h *RR_Header) copyHeader() *RR_Header { + r := new(RR_Header) + r.Name = h.Name + r.Rrtype = h.Rrtype + r.Class = h.Class + r.Ttl = h.Ttl + r.Rdlength = h.Rdlength + return r +} + +func (h *RR_Header) String() string { + var s string + + if h.Rrtype == TypeOPT { + s = ";" + // and maybe other things + } + + s += sprintName(h.Name) + "\t" + s += strconv.FormatInt(int64(h.Ttl), 10) + "\t" + s += Class(h.Class).String() + "\t" + s += Type(h.Rrtype).String() + "\t" + return s +} + +func (h *RR_Header) len() int { + l := len(h.Name) + 1 + l += 10 // rrtype(2) + class(2) + ttl(4) + rdlength(2) + return l +} + +// ToRFC3597 converts a known RR to the unknown RR representation +// from RFC 3597. +func (rr *RFC3597) ToRFC3597(r RR) error { + buf := make([]byte, r.len()*2) + off, err := PackStruct(r, buf, 0) + if err != nil { + return err + } + buf = buf[:off] + rawSetRdlength(buf, 0, off) + _, err = UnpackStruct(rr, buf, 0) + if err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/miekg/dns/dnssec.go b/vendor/github.com/miekg/dns/dnssec.go new file mode 100644 index 0000000..49ab4f1 --- /dev/null +++ b/vendor/github.com/miekg/dns/dnssec.go @@ -0,0 +1,659 @@ +package dns + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + _ "crypto/md5" + "crypto/rand" + "crypto/rsa" + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/asn1" + "encoding/hex" + "math/big" + "sort" + "strings" + "time" +) + +// DNSSEC encryption algorithm codes. +const ( + _ uint8 = iota + RSAMD5 + DH + DSA + _ // Skip 4, RFC 6725, section 2.1 + RSASHA1 + DSANSEC3SHA1 + RSASHA1NSEC3SHA1 + RSASHA256 + _ // Skip 9, RFC 6725, section 2.1 + RSASHA512 + _ // Skip 11, RFC 6725, section 2.1 + ECCGOST + ECDSAP256SHA256 + ECDSAP384SHA384 + INDIRECT uint8 = 252 + PRIVATEDNS uint8 = 253 // Private (experimental keys) + PRIVATEOID uint8 = 254 +) + +// Map for algorithm names. +var AlgorithmToString = map[uint8]string{ + RSAMD5: "RSAMD5", + DH: "DH", + DSA: "DSA", + RSASHA1: "RSASHA1", + DSANSEC3SHA1: "DSA-NSEC3-SHA1", + RSASHA1NSEC3SHA1: "RSASHA1-NSEC3-SHA1", + RSASHA256: "RSASHA256", + RSASHA512: "RSASHA512", + ECCGOST: "ECC-GOST", + ECDSAP256SHA256: "ECDSAP256SHA256", + ECDSAP384SHA384: "ECDSAP384SHA384", + INDIRECT: "INDIRECT", + PRIVATEDNS: "PRIVATEDNS", + PRIVATEOID: "PRIVATEOID", +} + +// Map of algorithm strings. +var StringToAlgorithm = reverseInt8(AlgorithmToString) + +// Map of algorithm crypto hashes. +var AlgorithmToHash = map[uint8]crypto.Hash{ + RSAMD5: crypto.MD5, // Deprecated in RFC 6725 + RSASHA1: crypto.SHA1, + RSASHA1NSEC3SHA1: crypto.SHA1, + RSASHA256: crypto.SHA256, + ECDSAP256SHA256: crypto.SHA256, + ECDSAP384SHA384: crypto.SHA384, + RSASHA512: crypto.SHA512, +} + +// DNSSEC hashing algorithm codes. +const ( + _ uint8 = iota + SHA1 // RFC 4034 + SHA256 // RFC 4509 + GOST94 // RFC 5933 + SHA384 // Experimental + SHA512 // Experimental +) + +// Map for hash names. +var HashToString = map[uint8]string{ + SHA1: "SHA1", + SHA256: "SHA256", + GOST94: "GOST94", + SHA384: "SHA384", + SHA512: "SHA512", +} + +// Map of hash strings. +var StringToHash = reverseInt8(HashToString) + +// DNSKEY flag values. +const ( + SEP = 1 + REVOKE = 1 << 7 + ZONE = 1 << 8 +) + +// The RRSIG needs to be converted to wireformat with some of +// the rdata (the signature) missing. Use this struct to easy +// the conversion (and re-use the pack/unpack functions). +type rrsigWireFmt struct { + TypeCovered uint16 + Algorithm uint8 + Labels uint8 + OrigTtl uint32 + Expiration uint32 + Inception uint32 + KeyTag uint16 + SignerName string `dns:"domain-name"` + /* No Signature */ +} + +// Used for converting DNSKEY's rdata to wirefmt. +type dnskeyWireFmt struct { + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` + /* Nothing is left out */ +} + +func divRoundUp(a, b int) int { + return (a + b - 1) / b +} + +// KeyTag calculates the keytag (or key-id) of the DNSKEY. +func (k *DNSKEY) KeyTag() uint16 { + if k == nil { + return 0 + } + var keytag int + switch k.Algorithm { + case RSAMD5: + // Look at the bottom two bytes of the modules, which the last + // item in the pubkey. We could do this faster by looking directly + // at the base64 values. But I'm lazy. + modulus, _ := fromBase64([]byte(k.PublicKey)) + if len(modulus) > 1 { + x, _ := unpackUint16(modulus, len(modulus)-2) + keytag = int(x) + } + default: + keywire := new(dnskeyWireFmt) + keywire.Flags = k.Flags + keywire.Protocol = k.Protocol + keywire.Algorithm = k.Algorithm + keywire.PublicKey = k.PublicKey + wire := make([]byte, DefaultMsgSize) + n, err := PackStruct(keywire, wire, 0) + if err != nil { + return 0 + } + wire = wire[:n] + for i, v := range wire { + if i&1 != 0 { + keytag += int(v) // must be larger than uint32 + } else { + keytag += int(v) << 8 + } + } + keytag += (keytag >> 16) & 0xFFFF + keytag &= 0xFFFF + } + return uint16(keytag) +} + +// ToDS converts a DNSKEY record to a DS record. +func (k *DNSKEY) ToDS(h uint8) *DS { + if k == nil { + return nil + } + ds := new(DS) + ds.Hdr.Name = k.Hdr.Name + ds.Hdr.Class = k.Hdr.Class + ds.Hdr.Rrtype = TypeDS + ds.Hdr.Ttl = k.Hdr.Ttl + ds.Algorithm = k.Algorithm + ds.DigestType = h + ds.KeyTag = k.KeyTag() + + keywire := new(dnskeyWireFmt) + keywire.Flags = k.Flags + keywire.Protocol = k.Protocol + keywire.Algorithm = k.Algorithm + keywire.PublicKey = k.PublicKey + wire := make([]byte, DefaultMsgSize) + n, err := PackStruct(keywire, wire, 0) + if err != nil { + return nil + } + wire = wire[:n] + + owner := make([]byte, 255) + off, err1 := PackDomainName(strings.ToLower(k.Hdr.Name), owner, 0, nil, false) + if err1 != nil { + return nil + } + owner = owner[:off] + // RFC4034: + // digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA); + // "|" denotes concatenation + // DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key. + + // digest buffer + digest := append(owner, wire...) // another copy + + var hash crypto.Hash + switch h { + case SHA1: + hash = crypto.SHA1 + case SHA256: + hash = crypto.SHA256 + case SHA384: + hash = crypto.SHA384 + case SHA512: + hash = crypto.SHA512 + default: + return nil + } + + s := hash.New() + s.Write(digest) + ds.Digest = hex.EncodeToString(s.Sum(nil)) + return ds +} + +// ToCDNSKEY converts a DNSKEY record to a CDNSKEY record. +func (k *DNSKEY) ToCDNSKEY() *CDNSKEY { + c := &CDNSKEY{DNSKEY: *k} + c.Hdr = *k.Hdr.copyHeader() + c.Hdr.Rrtype = TypeCDNSKEY + return c +} + +// ToCDS converts a DS record to a CDS record. +func (d *DS) ToCDS() *CDS { + c := &CDS{DS: *d} + c.Hdr = *d.Hdr.copyHeader() + c.Hdr.Rrtype = TypeCDS + return c +} + +// Sign signs an RRSet. The signature needs to be filled in with +// the values: Inception, Expiration, KeyTag, SignerName and Algorithm. +// The rest is copied from the RRset. Sign returns true when the signing went OK, +// otherwise false. +// There is no check if RRSet is a proper (RFC 2181) RRSet. +// If OrigTTL is non zero, it is used as-is, otherwise the TTL of the RRset +// is used as the OrigTTL. +func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error { + if k == nil { + return ErrPrivKey + } + // s.Inception and s.Expiration may be 0 (rollover etc.), the rest must be set + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return ErrKey + } + + rr.Hdr.Rrtype = TypeRRSIG + rr.Hdr.Name = rrset[0].Header().Name + rr.Hdr.Class = rrset[0].Header().Class + if rr.OrigTtl == 0 { // If set don't override + rr.OrigTtl = rrset[0].Header().Ttl + } + rr.TypeCovered = rrset[0].Header().Rrtype + rr.Labels = uint8(CountLabel(rrset[0].Header().Name)) + + if strings.HasPrefix(rrset[0].Header().Name, "*") { + rr.Labels-- // wildcard, remove from label count + } + + sigwire := new(rrsigWireFmt) + sigwire.TypeCovered = rr.TypeCovered + sigwire.Algorithm = rr.Algorithm + sigwire.Labels = rr.Labels + sigwire.OrigTtl = rr.OrigTtl + sigwire.Expiration = rr.Expiration + sigwire.Inception = rr.Inception + sigwire.KeyTag = rr.KeyTag + // For signing, lowercase this name + sigwire.SignerName = strings.ToLower(rr.SignerName) + + // Create the desired binary blob + signdata := make([]byte, DefaultMsgSize) + n, err := PackStruct(sigwire, signdata, 0) + if err != nil { + return err + } + signdata = signdata[:n] + wire, err := rawSignatureData(rrset, rr) + if err != nil { + return err + } + signdata = append(signdata, wire...) + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return ErrAlg + } + + h := hash.New() + h.Write(signdata) + + signature, err := sign(k, h.Sum(nil), hash, rr.Algorithm) + if err != nil { + return err + } + + rr.Signature = toBase64(signature) + + return nil +} + +func sign(k crypto.Signer, hashed []byte, hash crypto.Hash, alg uint8) ([]byte, error) { + signature, err := k.Sign(rand.Reader, hashed, hash) + if err != nil { + return nil, err + } + + switch alg { + case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512: + return signature, nil + + case ECDSAP256SHA256, ECDSAP384SHA384: + ecdsaSignature := &struct { + R, S *big.Int + }{} + if _, err := asn1.Unmarshal(signature, ecdsaSignature); err != nil { + return nil, err + } + + var intlen int + switch alg { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + + signature := intToBytes(ecdsaSignature.R, intlen) + signature = append(signature, intToBytes(ecdsaSignature.S, intlen)...) + return signature, nil + + // There is no defined interface for what a DSA backed crypto.Signer returns + case DSA, DSANSEC3SHA1: + // t := divRoundUp(divRoundUp(p.PublicKey.Y.BitLen(), 8)-64, 8) + // signature := []byte{byte(t)} + // signature = append(signature, intToBytes(r1, 20)...) + // signature = append(signature, intToBytes(s1, 20)...) + // rr.Signature = signature + } + + return nil, ErrAlg +} + +// Verify validates an RRSet with the signature and key. This is only the +// cryptographic test, the signature validity period must be checked separately. +// This function copies the rdata of some RRs (to lowercase domain names) for the validation to work. +func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { + // First the easy checks + if !IsRRset(rrset) { + return ErrRRset + } + if rr.KeyTag != k.KeyTag() { + return ErrKey + } + if rr.Hdr.Class != k.Hdr.Class { + return ErrKey + } + if rr.Algorithm != k.Algorithm { + return ErrKey + } + if strings.ToLower(rr.SignerName) != strings.ToLower(k.Hdr.Name) { + return ErrKey + } + if k.Protocol != 3 { + return ErrKey + } + + // IsRRset checked that we have at least one RR and that the RRs in + // the set have consistent type, class, and name. Also check that type and + // class matches the RRSIG record. + if rrset[0].Header().Class != rr.Hdr.Class { + return ErrRRset + } + if rrset[0].Header().Rrtype != rr.TypeCovered { + return ErrRRset + } + + // RFC 4035 5.3.2. Reconstructing the Signed Data + // Copy the sig, except the rrsig data + sigwire := new(rrsigWireFmt) + sigwire.TypeCovered = rr.TypeCovered + sigwire.Algorithm = rr.Algorithm + sigwire.Labels = rr.Labels + sigwire.OrigTtl = rr.OrigTtl + sigwire.Expiration = rr.Expiration + sigwire.Inception = rr.Inception + sigwire.KeyTag = rr.KeyTag + sigwire.SignerName = strings.ToLower(rr.SignerName) + // Create the desired binary blob + signeddata := make([]byte, DefaultMsgSize) + n, err := PackStruct(sigwire, signeddata, 0) + if err != nil { + return err + } + signeddata = signeddata[:n] + wire, err := rawSignatureData(rrset, rr) + if err != nil { + return err + } + signeddata = append(signeddata, wire...) + + sigbuf := rr.sigBuf() // Get the binary signature data + if rr.Algorithm == PRIVATEDNS { // PRIVATEOID + // TODO(mg) + // remove the domain name and assume its our + } + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return ErrAlg + } + + switch rr.Algorithm { + case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512, RSAMD5: + // TODO(mg): this can be done quicker, ie. cache the pubkey data somewhere?? + pubkey := k.publicKeyRSA() // Get the key + if pubkey == nil { + return ErrKey + } + + h := hash.New() + h.Write(signeddata) + return rsa.VerifyPKCS1v15(pubkey, hash, h.Sum(nil), sigbuf) + + case ECDSAP256SHA256, ECDSAP384SHA384: + pubkey := k.publicKeyECDSA() + if pubkey == nil { + return ErrKey + } + + // Split sigbuf into the r and s coordinates + r := new(big.Int).SetBytes(sigbuf[:len(sigbuf)/2]) + s := new(big.Int).SetBytes(sigbuf[len(sigbuf)/2:]) + + h := hash.New() + h.Write(signeddata) + if ecdsa.Verify(pubkey, h.Sum(nil), r, s) { + return nil + } + return ErrSig + + default: + return ErrAlg + } +} + +// ValidityPeriod uses RFC1982 serial arithmetic to calculate +// if a signature period is valid. If t is the zero time, the +// current time is taken other t is. Returns true if the signature +// is valid at the given time, otherwise returns false. +func (rr *RRSIG) ValidityPeriod(t time.Time) bool { + var utc int64 + if t.IsZero() { + utc = time.Now().UTC().Unix() + } else { + utc = t.UTC().Unix() + } + modi := (int64(rr.Inception) - utc) / year68 + mode := (int64(rr.Expiration) - utc) / year68 + ti := int64(rr.Inception) + (modi * year68) + te := int64(rr.Expiration) + (mode * year68) + return ti <= utc && utc <= te +} + +// Return the signatures base64 encodedig sigdata as a byte slice. +func (rr *RRSIG) sigBuf() []byte { + sigbuf, err := fromBase64([]byte(rr.Signature)) + if err != nil { + return nil + } + return sigbuf +} + +// publicKeyRSA returns the RSA public key from a DNSKEY record. +func (k *DNSKEY) publicKeyRSA() *rsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + + // RFC 2537/3110, section 2. RSA Public KEY Resource Records + // Length is in the 0th byte, unless its zero, then it + // it in bytes 1 and 2 and its a 16 bit number + explen := uint16(keybuf[0]) + keyoff := 1 + if explen == 0 { + explen = uint16(keybuf[1])<<8 | uint16(keybuf[2]) + keyoff = 3 + } + pubkey := new(rsa.PublicKey) + + pubkey.N = big.NewInt(0) + shift := uint64((explen - 1) * 8) + expo := uint64(0) + for i := int(explen - 1); i > 0; i-- { + expo += uint64(keybuf[keyoff+i]) << shift + shift -= 8 + } + // Remainder + expo += uint64(keybuf[keyoff]) + if expo > 2<<31 { + // Larger expo than supported. + // println("dns: F5 primes (or larger) are not supported") + return nil + } + pubkey.E = int(expo) + + pubkey.N.SetBytes(keybuf[keyoff+int(explen):]) + return pubkey +} + +// publicKeyECDSA returns the Curve public key from the DNSKEY record. +func (k *DNSKEY) publicKeyECDSA() *ecdsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + pubkey := new(ecdsa.PublicKey) + switch k.Algorithm { + case ECDSAP256SHA256: + pubkey.Curve = elliptic.P256() + if len(keybuf) != 64 { + // wrongly encoded key + return nil + } + case ECDSAP384SHA384: + pubkey.Curve = elliptic.P384() + if len(keybuf) != 96 { + // Wrongly encoded key + return nil + } + } + pubkey.X = big.NewInt(0) + pubkey.X.SetBytes(keybuf[:len(keybuf)/2]) + pubkey.Y = big.NewInt(0) + pubkey.Y.SetBytes(keybuf[len(keybuf)/2:]) + return pubkey +} + +func (k *DNSKEY) publicKeyDSA() *dsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + if len(keybuf) < 22 { + return nil + } + t, keybuf := int(keybuf[0]), keybuf[1:] + size := 64 + t*8 + q, keybuf := keybuf[:20], keybuf[20:] + if len(keybuf) != 3*size { + return nil + } + p, keybuf := keybuf[:size], keybuf[size:] + g, y := keybuf[:size], keybuf[size:] + pubkey := new(dsa.PublicKey) + pubkey.Parameters.Q = big.NewInt(0).SetBytes(q) + pubkey.Parameters.P = big.NewInt(0).SetBytes(p) + pubkey.Parameters.G = big.NewInt(0).SetBytes(g) + pubkey.Y = big.NewInt(0).SetBytes(y) + return pubkey +} + +type wireSlice [][]byte + +func (p wireSlice) Len() int { return len(p) } +func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p wireSlice) Less(i, j int) bool { + _, ioff, _ := UnpackDomainName(p[i], 0) + _, joff, _ := UnpackDomainName(p[j], 0) + return bytes.Compare(p[i][ioff+10:], p[j][joff+10:]) < 0 +} + +// Return the raw signature data. +func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte, err error) { + wires := make(wireSlice, len(rrset)) + for i, r := range rrset { + r1 := r.copy() + r1.Header().Ttl = s.OrigTtl + labels := SplitDomainName(r1.Header().Name) + // 6.2. Canonical RR Form. (4) - wildcards + if len(labels) > int(s.Labels) { + // Wildcard + r1.Header().Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "." + } + // RFC 4034: 6.2. Canonical RR Form. (2) - domain name to lowercase + r1.Header().Name = strings.ToLower(r1.Header().Name) + // 6.2. Canonical RR Form. (3) - domain rdata to lowercase. + // NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR, + // HINFO, MINFO, MX, RP, AFSDB, RT, SIG, PX, NXT, NAPTR, KX, + // SRV, DNAME, A6 + switch x := r1.(type) { + case *NS: + x.Ns = strings.ToLower(x.Ns) + case *CNAME: + x.Target = strings.ToLower(x.Target) + case *SOA: + x.Ns = strings.ToLower(x.Ns) + x.Mbox = strings.ToLower(x.Mbox) + case *MB: + x.Mb = strings.ToLower(x.Mb) + case *MG: + x.Mg = strings.ToLower(x.Mg) + case *MR: + x.Mr = strings.ToLower(x.Mr) + case *PTR: + x.Ptr = strings.ToLower(x.Ptr) + case *MINFO: + x.Rmail = strings.ToLower(x.Rmail) + x.Email = strings.ToLower(x.Email) + case *MX: + x.Mx = strings.ToLower(x.Mx) + case *NAPTR: + x.Replacement = strings.ToLower(x.Replacement) + case *KX: + x.Exchanger = strings.ToLower(x.Exchanger) + case *SRV: + x.Target = strings.ToLower(x.Target) + case *DNAME: + x.Target = strings.ToLower(x.Target) + } + // 6.2. Canonical RR Form. (5) - origTTL + wire := make([]byte, r1.len()+1) // +1 to be safe(r) + off, err1 := PackRR(r1, wire, 0, nil, false) + if err1 != nil { + return nil, err1 + } + wire = wire[:off] + wires[i] = wire + } + sort.Sort(wires) + for i, wire := range wires { + if i > 0 && bytes.Equal(wire, wires[i-1]) { + continue + } + buf = append(buf, wire...) + } + return buf, nil +} diff --git a/vendor/github.com/miekg/dns/dnssec_keygen.go b/vendor/github.com/miekg/dns/dnssec_keygen.go new file mode 100644 index 0000000..229a079 --- /dev/null +++ b/vendor/github.com/miekg/dns/dnssec_keygen.go @@ -0,0 +1,156 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "math/big" +) + +// Generate generates a DNSKEY of the given bit size. +// The public part is put inside the DNSKEY record. +// The Algorithm in the key must be set as this will define +// what kind of DNSKEY will be generated. +// The ECDSA algorithms imply a fixed keysize, in that case +// bits should be set to the size of the algorithm. +func (k *DNSKEY) Generate(bits int) (crypto.PrivateKey, error) { + switch k.Algorithm { + case DSA, DSANSEC3SHA1: + if bits != 1024 { + return nil, ErrKeySize + } + case RSAMD5, RSASHA1, RSASHA256, RSASHA1NSEC3SHA1: + if bits < 512 || bits > 4096 { + return nil, ErrKeySize + } + case RSASHA512: + if bits < 1024 || bits > 4096 { + return nil, ErrKeySize + } + case ECDSAP256SHA256: + if bits != 256 { + return nil, ErrKeySize + } + case ECDSAP384SHA384: + if bits != 384 { + return nil, ErrKeySize + } + } + + switch k.Algorithm { + case DSA, DSANSEC3SHA1: + params := new(dsa.Parameters) + if err := dsa.GenerateParameters(params, rand.Reader, dsa.L1024N160); err != nil { + return nil, err + } + priv := new(dsa.PrivateKey) + priv.PublicKey.Parameters = *params + err := dsa.GenerateKey(priv, rand.Reader) + if err != nil { + return nil, err + } + k.setPublicKeyDSA(params.Q, params.P, params.G, priv.PublicKey.Y) + return priv, nil + case RSAMD5, RSASHA1, RSASHA256, RSASHA512, RSASHA1NSEC3SHA1: + priv, err := rsa.GenerateKey(rand.Reader, bits) + if err != nil { + return nil, err + } + k.setPublicKeyRSA(priv.PublicKey.E, priv.PublicKey.N) + return priv, nil + case ECDSAP256SHA256, ECDSAP384SHA384: + var c elliptic.Curve + switch k.Algorithm { + case ECDSAP256SHA256: + c = elliptic.P256() + case ECDSAP384SHA384: + c = elliptic.P384() + } + priv, err := ecdsa.GenerateKey(c, rand.Reader) + if err != nil { + return nil, err + } + k.setPublicKeyECDSA(priv.PublicKey.X, priv.PublicKey.Y) + return priv, nil + default: + return nil, ErrAlg + } +} + +// Set the public key (the value E and N) +func (k *DNSKEY) setPublicKeyRSA(_E int, _N *big.Int) bool { + if _E == 0 || _N == nil { + return false + } + buf := exponentToBuf(_E) + buf = append(buf, _N.Bytes()...) + k.PublicKey = toBase64(buf) + return true +} + +// Set the public key for Elliptic Curves +func (k *DNSKEY) setPublicKeyECDSA(_X, _Y *big.Int) bool { + if _X == nil || _Y == nil { + return false + } + var intlen int + switch k.Algorithm { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + k.PublicKey = toBase64(curveToBuf(_X, _Y, intlen)) + return true +} + +// Set the public key for DSA +func (k *DNSKEY) setPublicKeyDSA(_Q, _P, _G, _Y *big.Int) bool { + if _Q == nil || _P == nil || _G == nil || _Y == nil { + return false + } + buf := dsaToBuf(_Q, _P, _G, _Y) + k.PublicKey = toBase64(buf) + return true +} + +// Set the public key (the values E and N) for RSA +// RFC 3110: Section 2. RSA Public KEY Resource Records +func exponentToBuf(_E int) []byte { + var buf []byte + i := big.NewInt(int64(_E)) + if len(i.Bytes()) < 256 { + buf = make([]byte, 1) + buf[0] = uint8(len(i.Bytes())) + } else { + buf = make([]byte, 3) + buf[0] = 0 + buf[1] = uint8(len(i.Bytes()) >> 8) + buf[2] = uint8(len(i.Bytes())) + } + buf = append(buf, i.Bytes()...) + return buf +} + +// Set the public key for X and Y for Curve. The two +// values are just concatenated. +func curveToBuf(_X, _Y *big.Int, intlen int) []byte { + buf := intToBytes(_X, intlen) + buf = append(buf, intToBytes(_Y, intlen)...) + return buf +} + +// Set the public key for X and Y for Curve. The two +// values are just concatenated. +func dsaToBuf(_Q, _P, _G, _Y *big.Int) []byte { + t := divRoundUp(divRoundUp(_G.BitLen(), 8)-64, 8) + buf := []byte{byte(t)} + buf = append(buf, intToBytes(_Q, 20)...) + buf = append(buf, intToBytes(_P, 64+t*8)...) + buf = append(buf, intToBytes(_G, 64+t*8)...) + buf = append(buf, intToBytes(_Y, 64+t*8)...) + return buf +} diff --git a/vendor/github.com/miekg/dns/dnssec_keyscan.go b/vendor/github.com/miekg/dns/dnssec_keyscan.go new file mode 100644 index 0000000..19a7833 --- /dev/null +++ b/vendor/github.com/miekg/dns/dnssec_keyscan.go @@ -0,0 +1,249 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "io" + "math/big" + "strconv" + "strings" +) + +// NewPrivateKey returns a PrivateKey by parsing the string s. +// s should be in the same form of the BIND private key files. +func (k *DNSKEY) NewPrivateKey(s string) (crypto.PrivateKey, error) { + if s[len(s)-1] != '\n' { // We need a closing newline + return k.ReadPrivateKey(strings.NewReader(s+"\n"), "") + } + return k.ReadPrivateKey(strings.NewReader(s), "") +} + +// ReadPrivateKey reads a private key from the io.Reader q. The string file is +// only used in error reporting. +// The public key must be known, because some cryptographic algorithms embed +// the public inside the privatekey. +func (k *DNSKEY) ReadPrivateKey(q io.Reader, file string) (crypto.PrivateKey, error) { + m, e := parseKey(q, file) + if m == nil { + return nil, e + } + if _, ok := m["private-key-format"]; !ok { + return nil, ErrPrivKey + } + if m["private-key-format"] != "v1.2" && m["private-key-format"] != "v1.3" { + return nil, ErrPrivKey + } + // TODO(mg): check if the pubkey matches the private key + algo, err := strconv.Atoi(strings.SplitN(m["algorithm"], " ", 2)[0]) + if err != nil { + return nil, ErrPrivKey + } + switch uint8(algo) { + case DSA: + priv, e := readPrivateKeyDSA(m) + if e != nil { + return nil, e + } + pub := k.publicKeyDSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, e + case RSAMD5: + fallthrough + case RSASHA1: + fallthrough + case RSASHA1NSEC3SHA1: + fallthrough + case RSASHA256: + fallthrough + case RSASHA512: + priv, e := readPrivateKeyRSA(m) + if e != nil { + return nil, e + } + pub := k.publicKeyRSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, e + case ECCGOST: + return nil, ErrPrivKey + case ECDSAP256SHA256: + fallthrough + case ECDSAP384SHA384: + priv, e := readPrivateKeyECDSA(m) + if e != nil { + return nil, e + } + pub := k.publicKeyECDSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, e + default: + return nil, ErrPrivKey + } +} + +// Read a private key (file) string and create a public key. Return the private key. +func readPrivateKeyRSA(m map[string]string) (*rsa.PrivateKey, error) { + p := new(rsa.PrivateKey) + p.Primes = []*big.Int{nil, nil} + for k, v := range m { + switch k { + case "modulus", "publicexponent", "privateexponent", "prime1", "prime2": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + switch k { + case "modulus": + p.PublicKey.N = big.NewInt(0) + p.PublicKey.N.SetBytes(v1) + case "publicexponent": + i := big.NewInt(0) + i.SetBytes(v1) + p.PublicKey.E = int(i.Int64()) // int64 should be large enough + case "privateexponent": + p.D = big.NewInt(0) + p.D.SetBytes(v1) + case "prime1": + p.Primes[0] = big.NewInt(0) + p.Primes[0].SetBytes(v1) + case "prime2": + p.Primes[1] = big.NewInt(0) + p.Primes[1].SetBytes(v1) + } + case "exponent1", "exponent2", "coefficient": + // not used in Go (yet) + case "created", "publish", "activate": + // not used in Go (yet) + } + } + return p, nil +} + +func readPrivateKeyDSA(m map[string]string) (*dsa.PrivateKey, error) { + p := new(dsa.PrivateKey) + p.X = big.NewInt(0) + for k, v := range m { + switch k { + case "private_value(x)": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + p.X.SetBytes(v1) + case "created", "publish", "activate": + /* not used in Go (yet) */ + } + } + return p, nil +} + +func readPrivateKeyECDSA(m map[string]string) (*ecdsa.PrivateKey, error) { + p := new(ecdsa.PrivateKey) + p.D = big.NewInt(0) + // TODO: validate that the required flags are present + for k, v := range m { + switch k { + case "privatekey": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + p.D.SetBytes(v1) + case "created", "publish", "activate": + /* not used in Go (yet) */ + } + } + return p, nil +} + +// parseKey reads a private key from r. It returns a map[string]string, +// with the key-value pairs, or an error when the file is not correct. +func parseKey(r io.Reader, file string) (map[string]string, error) { + s := scanInit(r) + m := make(map[string]string) + c := make(chan lex) + k := "" + // Start the lexer + go klexer(s, c) + for l := range c { + // It should alternate + switch l.value { + case zKey: + k = l.token + case zValue: + if k == "" { + return nil, &ParseError{file, "no private key seen", l} + } + //println("Setting", strings.ToLower(k), "to", l.token, "b") + m[strings.ToLower(k)] = l.token + k = "" + } + } + return m, nil +} + +// klexer scans the sourcefile and returns tokens on the channel c. +func klexer(s *scan, c chan lex) { + var l lex + str := "" // Hold the current read text + commt := false + key := true + x, err := s.tokenText() + defer close(c) + for err == nil { + l.column = s.position.Column + l.line = s.position.Line + switch x { + case ':': + if commt { + break + } + l.token = str + if key { + l.value = zKey + c <- l + // Next token is a space, eat it + s.tokenText() + key = false + str = "" + } else { + l.value = zValue + } + case ';': + commt = true + case '\n': + if commt { + // Reset a comment + commt = false + } + l.value = zValue + l.token = str + c <- l + str = "" + commt = false + key = true + default: + if commt { + break + } + str += string(x) + } + x, err = s.tokenText() + } + if len(str) > 0 { + // Send remainder + l.token = str + l.value = zValue + c <- l + } +} diff --git a/vendor/github.com/miekg/dns/dnssec_privkey.go b/vendor/github.com/miekg/dns/dnssec_privkey.go new file mode 100644 index 0000000..56f3ea9 --- /dev/null +++ b/vendor/github.com/miekg/dns/dnssec_privkey.go @@ -0,0 +1,85 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "math/big" + "strconv" +) + +const format = "Private-key-format: v1.3\n" + +// PrivateKeyString converts a PrivateKey to a string. This string has the same +// format as the private-key-file of BIND9 (Private-key-format: v1.3). +// It needs some info from the key (the algorithm), so its a method of the DNSKEY +// It supports rsa.PrivateKey, ecdsa.PrivateKey and dsa.PrivateKey +func (r *DNSKEY) PrivateKeyString(p crypto.PrivateKey) string { + algorithm := strconv.Itoa(int(r.Algorithm)) + algorithm += " (" + AlgorithmToString[r.Algorithm] + ")" + + switch p := p.(type) { + case *rsa.PrivateKey: + modulus := toBase64(p.PublicKey.N.Bytes()) + e := big.NewInt(int64(p.PublicKey.E)) + publicExponent := toBase64(e.Bytes()) + privateExponent := toBase64(p.D.Bytes()) + prime1 := toBase64(p.Primes[0].Bytes()) + prime2 := toBase64(p.Primes[1].Bytes()) + // Calculate Exponent1/2 and Coefficient as per: http://en.wikipedia.org/wiki/RSA#Using_the_Chinese_remainder_algorithm + // and from: http://code.google.com/p/go/issues/detail?id=987 + one := big.NewInt(1) + p1 := big.NewInt(0).Sub(p.Primes[0], one) + q1 := big.NewInt(0).Sub(p.Primes[1], one) + exp1 := big.NewInt(0).Mod(p.D, p1) + exp2 := big.NewInt(0).Mod(p.D, q1) + coeff := big.NewInt(0).ModInverse(p.Primes[1], p.Primes[0]) + + exponent1 := toBase64(exp1.Bytes()) + exponent2 := toBase64(exp2.Bytes()) + coefficient := toBase64(coeff.Bytes()) + + return format + + "Algorithm: " + algorithm + "\n" + + "Modulus: " + modulus + "\n" + + "PublicExponent: " + publicExponent + "\n" + + "PrivateExponent: " + privateExponent + "\n" + + "Prime1: " + prime1 + "\n" + + "Prime2: " + prime2 + "\n" + + "Exponent1: " + exponent1 + "\n" + + "Exponent2: " + exponent2 + "\n" + + "Coefficient: " + coefficient + "\n" + + case *ecdsa.PrivateKey: + var intlen int + switch r.Algorithm { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + private := toBase64(intToBytes(p.D, intlen)) + return format + + "Algorithm: " + algorithm + "\n" + + "PrivateKey: " + private + "\n" + + case *dsa.PrivateKey: + T := divRoundUp(divRoundUp(p.PublicKey.Parameters.G.BitLen(), 8)-64, 8) + prime := toBase64(intToBytes(p.PublicKey.Parameters.P, 64+T*8)) + subprime := toBase64(intToBytes(p.PublicKey.Parameters.Q, 20)) + base := toBase64(intToBytes(p.PublicKey.Parameters.G, 64+T*8)) + priv := toBase64(intToBytes(p.X, 20)) + pub := toBase64(intToBytes(p.PublicKey.Y, 64+T*8)) + return format + + "Algorithm: " + algorithm + "\n" + + "Prime(p): " + prime + "\n" + + "Subprime(q): " + subprime + "\n" + + "Base(g): " + base + "\n" + + "Private_value(x): " + priv + "\n" + + "Public_value(y): " + pub + "\n" + + default: + return "" + } +} diff --git a/vendor/github.com/miekg/dns/doc.go b/vendor/github.com/miekg/dns/doc.go new file mode 100644 index 0000000..89eace5 --- /dev/null +++ b/vendor/github.com/miekg/dns/doc.go @@ -0,0 +1,251 @@ +/* +Package dns implements a full featured interface to the Domain Name System. +Server- and client-side programming is supported. +The package allows complete control over what is send out to the DNS. The package +API follows the less-is-more principle, by presenting a small, clean interface. + +The package dns supports (asynchronous) querying/replying, incoming/outgoing zone transfers, +TSIG, EDNS0, dynamic updates, notifies and DNSSEC validation/signing. +Note that domain names MUST be fully qualified, before sending them, unqualified +names in a message will result in a packing failure. + +Resource records are native types. They are not stored in wire format. +Basic usage pattern for creating a new resource record: + + r := new(dns.MX) + r.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeMX, + Class: dns.ClassINET, Ttl: 3600} + r.Preference = 10 + r.Mx = "mx.miek.nl." + +Or directly from a string: + + mx, err := dns.NewRR("miek.nl. 3600 IN MX 10 mx.miek.nl.") + +Or when the default TTL (3600) and class (IN) suit you: + + mx, err := dns.NewRR("miek.nl. MX 10 mx.miek.nl.") + +Or even: + + mx, err := dns.NewRR("$ORIGIN nl.\nmiek 1H IN MX 10 mx.miek") + +In the DNS messages are exchanged, these messages contain resource +records (sets). Use pattern for creating a message: + + m := new(dns.Msg) + m.SetQuestion("miek.nl.", dns.TypeMX) + +Or when not certain if the domain name is fully qualified: + + m.SetQuestion(dns.Fqdn("miek.nl"), dns.TypeMX) + +The message m is now a message with the question section set to ask +the MX records for the miek.nl. zone. + +The following is slightly more verbose, but more flexible: + + m1 := new(dns.Msg) + m1.Id = dns.Id() + m1.RecursionDesired = true + m1.Question = make([]dns.Question, 1) + m1.Question[0] = dns.Question{"miek.nl.", dns.TypeMX, dns.ClassINET} + +After creating a message it can be send. +Basic use pattern for synchronous querying the DNS at a +server configured on 127.0.0.1 and port 53: + + c := new(dns.Client) + in, rtt, err := c.Exchange(m1, "127.0.0.1:53") + +Suppressing multiple outstanding queries (with the same question, type and +class) is as easy as setting: + + c.SingleInflight = true + +If these "advanced" features are not needed, a simple UDP query can be send, +with: + + in, err := dns.Exchange(m1, "127.0.0.1:53") + +When this functions returns you will get dns message. A dns message consists +out of four sections. +The question section: in.Question, the answer section: in.Answer, +the authority section: in.Ns and the additional section: in.Extra. + +Each of these sections (except the Question section) contain a []RR. Basic +use pattern for accessing the rdata of a TXT RR as the first RR in +the Answer section: + + if t, ok := in.Answer[0].(*dns.TXT); ok { + // do something with t.Txt + } + +Domain Name and TXT Character String Representations + +Both domain names and TXT character strings are converted to presentation +form both when unpacked and when converted to strings. + +For TXT character strings, tabs, carriage returns and line feeds will be +converted to \t, \r and \n respectively. Back slashes and quotations marks +will be escaped. Bytes below 32 and above 127 will be converted to \DDD +form. + +For domain names, in addition to the above rules brackets, periods, +spaces, semicolons and the at symbol are escaped. + +DNSSEC + +DNSSEC (DNS Security Extension) adds a layer of security to the DNS. It +uses public key cryptography to sign resource records. The +public keys are stored in DNSKEY records and the signatures in RRSIG records. + +Requesting DNSSEC information for a zone is done by adding the DO (DNSSEC OK) bit +to an request. + + m := new(dns.Msg) + m.SetEdns0(4096, true) + +Signature generation, signature verification and key generation are all supported. + +DYNAMIC UPDATES + +Dynamic updates reuses the DNS message format, but renames three of +the sections. Question is Zone, Answer is Prerequisite, Authority is +Update, only the Additional is not renamed. See RFC 2136 for the gory details. + +You can set a rather complex set of rules for the existence of absence of +certain resource records or names in a zone to specify if resource records +should be added or removed. The table from RFC 2136 supplemented with the Go +DNS function shows which functions exist to specify the prerequisites. + + 3.2.4 - Table Of Metavalues Used In Prerequisite Section + + CLASS TYPE RDATA Meaning Function + -------------------------------------------------------------- + ANY ANY empty Name is in use dns.NameUsed + ANY rrset empty RRset exists (value indep) dns.RRsetUsed + NONE ANY empty Name is not in use dns.NameNotUsed + NONE rrset empty RRset does not exist dns.RRsetNotUsed + zone rrset rr RRset exists (value dep) dns.Used + +The prerequisite section can also be left empty. +If you have decided on the prerequisites you can tell what RRs should +be added or deleted. The next table shows the options you have and +what functions to call. + + 3.4.2.6 - Table Of Metavalues Used In Update Section + + CLASS TYPE RDATA Meaning Function + --------------------------------------------------------------- + ANY ANY empty Delete all RRsets from name dns.RemoveName + ANY rrset empty Delete an RRset dns.RemoveRRset + NONE rrset rr Delete an RR from RRset dns.Remove + zone rrset rr Add to an RRset dns.Insert + +TRANSACTION SIGNATURE + +An TSIG or transaction signature adds a HMAC TSIG record to each message sent. +The supported algorithms include: HmacMD5, HmacSHA1, HmacSHA256 and HmacSHA512. + +Basic use pattern when querying with a TSIG name "axfr." (note that these key names +must be fully qualified - as they are domain names) and the base64 secret +"so6ZGir4GPAqINNh9U5c3A==": + + c := new(dns.Client) + c.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + m := new(dns.Msg) + m.SetQuestion("miek.nl.", dns.TypeMX) + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + ... + // When sending the TSIG RR is calculated and filled in before sending + +When requesting an zone transfer (almost all TSIG usage is when requesting zone transfers), with +TSIG, this is the basic use pattern. In this example we request an AXFR for +miek.nl. with TSIG key named "axfr." and secret "so6ZGir4GPAqINNh9U5c3A==" +and using the server 176.58.119.54: + + t := new(dns.Transfer) + m := new(dns.Msg) + t.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + m.SetAxfr("miek.nl.") + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + c, err := t.In(m, "176.58.119.54:53") + for r := range c { ... } + +You can now read the records from the transfer as they come in. Each envelope is checked with TSIG. +If something is not correct an error is returned. + +Basic use pattern validating and replying to a message that has TSIG set. + + server := &dns.Server{Addr: ":53", Net: "udp"} + server.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + go server.ListenAndServe() + dns.HandleFunc(".", handleRequest) + + func handleRequest(w dns.ResponseWriter, r *dns.Msg) { + m := new(dns.Msg) + m.SetReply(r) + if r.IsTsig() { + if w.TsigStatus() == nil { + // *Msg r has an TSIG record and it was validated + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + } else { + // *Msg r has an TSIG records and it was not valided + } + } + w.WriteMsg(m) + } + +PRIVATE RRS + +RFC 6895 sets aside a range of type codes for private use. This range +is 65,280 - 65,534 (0xFF00 - 0xFFFE). When experimenting with new Resource Records these +can be used, before requesting an official type code from IANA. + +see http://miek.nl/posts/2014/Sep/21/Private%20RRs%20and%20IDN%20in%20Go%20DNS/ for more +information. + +EDNS0 + +EDNS0 is an extension mechanism for the DNS defined in RFC 2671 and updated +by RFC 6891. It defines an new RR type, the OPT RR, which is then completely +abused. +Basic use pattern for creating an (empty) OPT RR: + + o := new(dns.OPT) + o.Hdr.Name = "." // MUST be the root zone, per definition. + o.Hdr.Rrtype = dns.TypeOPT + +The rdata of an OPT RR consists out of a slice of EDNS0 (RFC 6891) +interfaces. Currently only a few have been standardized: EDNS0_NSID +(RFC 5001) and EDNS0_SUBNET (draft-vandergaast-edns-client-subnet-02). Note +that these options may be combined in an OPT RR. +Basic use pattern for a server to check if (and which) options are set: + + // o is a dns.OPT + for _, s := range o.Option { + switch e := s.(type) { + case *dns.EDNS0_NSID: + // do stuff with e.Nsid + case *dns.EDNS0_SUBNET: + // access e.Family, e.Address, etc. + } + } + +SIG(0) + +From RFC 2931: + + SIG(0) provides protection for DNS transactions and requests .... + ... protection for glue records, DNS requests, protection for message headers + on requests and responses, and protection of the overall integrity of a response. + +It works like TSIG, except that SIG(0) uses public key cryptography, instead of the shared +secret approach in TSIG. +Supported algorithms: DSA, ECDSAP256SHA256, ECDSAP384SHA384, RSASHA1, RSASHA256 and +RSASHA512. + +Signing subsequent messages in multi-message sessions is not implemented. +*/ +package dns diff --git a/vendor/github.com/miekg/dns/edns.go b/vendor/github.com/miekg/dns/edns.go new file mode 100644 index 0000000..87c8aff --- /dev/null +++ b/vendor/github.com/miekg/dns/edns.go @@ -0,0 +1,514 @@ +package dns + +import ( + "encoding/hex" + "errors" + "net" + "strconv" +) + +// EDNS0 Option codes. +const ( + EDNS0LLQ = 0x1 // long lived queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01 + EDNS0UL = 0x2 // update lease draft: http://files.dns-sd.org/draft-sekar-dns-ul.txt + EDNS0NSID = 0x3 // nsid (RFC5001) + EDNS0DAU = 0x5 // DNSSEC Algorithm Understood + EDNS0DHU = 0x6 // DS Hash Understood + EDNS0N3U = 0x7 // NSEC3 Hash Understood + EDNS0SUBNET = 0x8 // client-subnet (RFC6891) + EDNS0EXPIRE = 0x9 // EDNS0 expire + EDNS0SUBNETDRAFT = 0x50fa // Don't use! Use EDNS0SUBNET + EDNS0LOCALSTART = 0xFDE9 // Beginning of range reserved for local/experimental use (RFC6891) + EDNS0LOCALEND = 0xFFFE // End of range reserved for local/experimental use (RFC6891) + _DO = 1 << 15 // dnssec ok +) + +// OPT is the EDNS0 RR appended to messages to convey extra (meta) information. +// See RFC 6891. +type OPT struct { + Hdr RR_Header + Option []EDNS0 `dns:"opt"` +} + +// Header implements the RR interface. +func (rr *OPT) Header() *RR_Header { + return &rr.Hdr +} + +func (rr *OPT) String() string { + s := "\n;; OPT PSEUDOSECTION:\n; EDNS: version " + strconv.Itoa(int(rr.Version())) + "; " + if rr.Do() { + s += "flags: do; " + } else { + s += "flags: ; " + } + s += "udp: " + strconv.Itoa(int(rr.UDPSize())) + + for _, o := range rr.Option { + switch o.(type) { + case *EDNS0_NSID: + s += "\n; NSID: " + o.String() + h, e := o.pack() + var r string + if e == nil { + for _, c := range h { + r += "(" + string(c) + ")" + } + s += " " + r + } + case *EDNS0_SUBNET: + s += "\n; SUBNET: " + o.String() + if o.(*EDNS0_SUBNET).DraftOption { + s += " (draft)" + } + case *EDNS0_UL: + s += "\n; UPDATE LEASE: " + o.String() + case *EDNS0_LLQ: + s += "\n; LONG LIVED QUERIES: " + o.String() + case *EDNS0_DAU: + s += "\n; DNSSEC ALGORITHM UNDERSTOOD: " + o.String() + case *EDNS0_DHU: + s += "\n; DS HASH UNDERSTOOD: " + o.String() + case *EDNS0_N3U: + s += "\n; NSEC3 HASH UNDERSTOOD: " + o.String() + case *EDNS0_LOCAL: + s += "\n; LOCAL OPT: " + o.String() + } + } + return s +} + +func (rr *OPT) len() int { + l := rr.Hdr.len() + for i := 0; i < len(rr.Option); i++ { + l += 4 // Account for 2-byte option code and 2-byte option length. + lo, _ := rr.Option[i].pack() + l += len(lo) + } + return l +} + +func (rr *OPT) copy() RR { + return &OPT{*rr.Hdr.copyHeader(), rr.Option} +} + +// return the old value -> delete SetVersion? + +// Version returns the EDNS version used. Only zero is defined. +func (rr *OPT) Version() uint8 { + return uint8((rr.Hdr.Ttl & 0x00FF0000) >> 16) +} + +// SetVersion sets the version of EDNS. This is usually zero. +func (rr *OPT) SetVersion(v uint8) { + rr.Hdr.Ttl = rr.Hdr.Ttl&0xFF00FFFF | (uint32(v) << 16) +} + +// ExtendedRcode returns the EDNS extended RCODE field (the upper 8 bits of the TTL). +func (rr *OPT) ExtendedRcode() uint8 { + return uint8((rr.Hdr.Ttl & 0xFF000000) >> 24) +} + +// SetExtendedRcode sets the EDNS extended RCODE field. +func (rr *OPT) SetExtendedRcode(v uint8) { + rr.Hdr.Ttl = rr.Hdr.Ttl&0x00FFFFFF | (uint32(v) << 24) +} + +// UDPSize returns the UDP buffer size. +func (rr *OPT) UDPSize() uint16 { + return rr.Hdr.Class +} + +// SetUDPSize sets the UDP buffer size. +func (rr *OPT) SetUDPSize(size uint16) { + rr.Hdr.Class = size +} + +// Do returns the value of the DO (DNSSEC OK) bit. +func (rr *OPT) Do() bool { + return rr.Hdr.Ttl&_DO == _DO +} + +// SetDo sets the DO (DNSSEC OK) bit. +func (rr *OPT) SetDo() { + rr.Hdr.Ttl |= _DO +} + +// EDNS0 defines an EDNS0 Option. An OPT RR can have multiple options appended to +// it. +type EDNS0 interface { + // Option returns the option code for the option. + Option() uint16 + // pack returns the bytes of the option data. + pack() ([]byte, error) + // unpack sets the data as found in the buffer. Is also sets + // the length of the slice as the length of the option data. + unpack([]byte) error + // String returns the string representation of the option. + String() string +} + +// The nsid EDNS0 option is used to retrieve a nameserver +// identifier. When sending a request Nsid must be set to the empty string +// The identifier is an opaque string encoded as hex. +// Basic use pattern for creating an nsid option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_NSID) +// e.Code = dns.EDNS0NSID +// e.Nsid = "AA" +// o.Option = append(o.Option, e) +type EDNS0_NSID struct { + Code uint16 // Always EDNS0NSID + Nsid string // This string needs to be hex encoded +} + +func (e *EDNS0_NSID) pack() ([]byte, error) { + h, err := hex.DecodeString(e.Nsid) + if err != nil { + return nil, err + } + return h, nil +} + +func (e *EDNS0_NSID) Option() uint16 { return EDNS0NSID } +func (e *EDNS0_NSID) unpack(b []byte) error { e.Nsid = hex.EncodeToString(b); return nil } +func (e *EDNS0_NSID) String() string { return string(e.Nsid) } + +// EDNS0_SUBNET is the subnet option that is used to give the remote nameserver +// an idea of where the client lives. It can then give back a different +// answer depending on the location or network topology. +// Basic use pattern for creating an subnet option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_SUBNET) +// e.Code = dns.EDNS0SUBNET +// e.Family = 1 // 1 for IPv4 source address, 2 for IPv6 +// e.NetMask = 32 // 32 for IPV4, 128 for IPv6 +// e.SourceScope = 0 +// e.Address = net.ParseIP("127.0.0.1").To4() // for IPv4 +// // e.Address = net.ParseIP("2001:7b8:32a::2") // for IPV6 +// o.Option = append(o.Option, e) +// +// Note: the spec (draft-ietf-dnsop-edns-client-subnet-00) has some insane logic +// for which netmask applies to the address. This code will parse all the +// available bits when unpacking (up to optlen). When packing it will apply +// SourceNetmask. If you need more advanced logic, patches welcome and good luck. +type EDNS0_SUBNET struct { + Code uint16 // Always EDNS0SUBNET + Family uint16 // 1 for IP, 2 for IP6 + SourceNetmask uint8 + SourceScope uint8 + Address net.IP + DraftOption bool // Set to true if using the old (0x50fa) option code +} + +func (e *EDNS0_SUBNET) Option() uint16 { + if e.DraftOption { + return EDNS0SUBNETDRAFT + } + return EDNS0SUBNET +} + +func (e *EDNS0_SUBNET) pack() ([]byte, error) { + b := make([]byte, 4) + b[0], b[1] = packUint16(e.Family) + b[2] = e.SourceNetmask + b[3] = e.SourceScope + switch e.Family { + case 1: + if e.SourceNetmask > net.IPv4len*8 { + return nil, errors.New("dns: bad netmask") + } + if len(e.Address.To4()) != net.IPv4len { + return nil, errors.New("dns: bad address") + } + ip := e.Address.To4().Mask(net.CIDRMask(int(e.SourceNetmask), net.IPv4len*8)) + needLength := (e.SourceNetmask + 8 - 1) / 8 // division rounding up + b = append(b, ip[:needLength]...) + case 2: + if e.SourceNetmask > net.IPv6len*8 { + return nil, errors.New("dns: bad netmask") + } + if len(e.Address) != net.IPv6len { + return nil, errors.New("dns: bad address") + } + ip := e.Address.Mask(net.CIDRMask(int(e.SourceNetmask), net.IPv6len*8)) + needLength := (e.SourceNetmask + 8 - 1) / 8 // division rounding up + b = append(b, ip[:needLength]...) + default: + return nil, errors.New("dns: bad address family") + } + return b, nil +} + +func (e *EDNS0_SUBNET) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Family, _ = unpackUint16(b, 0) + e.SourceNetmask = b[2] + e.SourceScope = b[3] + switch e.Family { + case 1: + if e.SourceNetmask > net.IPv4len*8 || e.SourceScope > net.IPv4len*8 { + return errors.New("dns: bad netmask") + } + addr := make([]byte, net.IPv4len) + for i := 0; i < net.IPv4len && 4+i < len(b); i++ { + addr[i] = b[4+i] + } + e.Address = net.IPv4(addr[0], addr[1], addr[2], addr[3]) + case 2: + if e.SourceNetmask > net.IPv6len*8 || e.SourceScope > net.IPv6len*8 { + return errors.New("dns: bad netmask") + } + addr := make([]byte, net.IPv6len) + for i := 0; i < net.IPv6len && 4+i < len(b); i++ { + addr[i] = b[4+i] + } + e.Address = net.IP{addr[0], addr[1], addr[2], addr[3], addr[4], + addr[5], addr[6], addr[7], addr[8], addr[9], addr[10], + addr[11], addr[12], addr[13], addr[14], addr[15]} + default: + return errors.New("dns: bad address family") + } + return nil +} + +func (e *EDNS0_SUBNET) String() (s string) { + if e.Address == nil { + s = "<nil>" + } else if e.Address.To4() != nil { + s = e.Address.String() + } else { + s = "[" + e.Address.String() + "]" + } + s += "/" + strconv.Itoa(int(e.SourceNetmask)) + "/" + strconv.Itoa(int(e.SourceScope)) + return +} + +// The EDNS0_UL (Update Lease) (draft RFC) option is used to tell the server to set +// an expiration on an update RR. This is helpful for clients that cannot clean +// up after themselves. This is a draft RFC and more information can be found at +// http://files.dns-sd.org/draft-sekar-dns-ul.txt +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_UL) +// e.Code = dns.EDNS0UL +// e.Lease = 120 // in seconds +// o.Option = append(o.Option, e) +type EDNS0_UL struct { + Code uint16 // Always EDNS0UL + Lease uint32 +} + +func (e *EDNS0_UL) Option() uint16 { return EDNS0UL } +func (e *EDNS0_UL) String() string { return strconv.FormatUint(uint64(e.Lease), 10) } + +// Copied: http://golang.org/src/pkg/net/dnsmsg.go +func (e *EDNS0_UL) pack() ([]byte, error) { + b := make([]byte, 4) + b[0] = byte(e.Lease >> 24) + b[1] = byte(e.Lease >> 16) + b[2] = byte(e.Lease >> 8) + b[3] = byte(e.Lease) + return b, nil +} + +func (e *EDNS0_UL) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Lease = uint32(b[0])<<24 | uint32(b[1])<<16 | uint32(b[2])<<8 | uint32(b[3]) + return nil +} + +// EDNS0_LLQ stands for Long Lived Queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01 +// Implemented for completeness, as the EDNS0 type code is assigned. +type EDNS0_LLQ struct { + Code uint16 // Always EDNS0LLQ + Version uint16 + Opcode uint16 + Error uint16 + Id uint64 + LeaseLife uint32 +} + +func (e *EDNS0_LLQ) Option() uint16 { return EDNS0LLQ } + +func (e *EDNS0_LLQ) pack() ([]byte, error) { + b := make([]byte, 18) + b[0], b[1] = packUint16(e.Version) + b[2], b[3] = packUint16(e.Opcode) + b[4], b[5] = packUint16(e.Error) + b[6] = byte(e.Id >> 56) + b[7] = byte(e.Id >> 48) + b[8] = byte(e.Id >> 40) + b[9] = byte(e.Id >> 32) + b[10] = byte(e.Id >> 24) + b[11] = byte(e.Id >> 16) + b[12] = byte(e.Id >> 8) + b[13] = byte(e.Id) + b[14] = byte(e.LeaseLife >> 24) + b[15] = byte(e.LeaseLife >> 16) + b[16] = byte(e.LeaseLife >> 8) + b[17] = byte(e.LeaseLife) + return b, nil +} + +func (e *EDNS0_LLQ) unpack(b []byte) error { + if len(b) < 18 { + return ErrBuf + } + e.Version, _ = unpackUint16(b, 0) + e.Opcode, _ = unpackUint16(b, 2) + e.Error, _ = unpackUint16(b, 4) + e.Id = uint64(b[6])<<56 | uint64(b[6+1])<<48 | uint64(b[6+2])<<40 | + uint64(b[6+3])<<32 | uint64(b[6+4])<<24 | uint64(b[6+5])<<16 | uint64(b[6+6])<<8 | uint64(b[6+7]) + e.LeaseLife = uint32(b[14])<<24 | uint32(b[14+1])<<16 | uint32(b[14+2])<<8 | uint32(b[14+3]) + return nil +} + +func (e *EDNS0_LLQ) String() string { + s := strconv.FormatUint(uint64(e.Version), 10) + " " + strconv.FormatUint(uint64(e.Opcode), 10) + + " " + strconv.FormatUint(uint64(e.Error), 10) + " " + strconv.FormatUint(uint64(e.Id), 10) + + " " + strconv.FormatUint(uint64(e.LeaseLife), 10) + return s +} + +type EDNS0_DAU struct { + Code uint16 // Always EDNS0DAU + AlgCode []uint8 +} + +func (e *EDNS0_DAU) Option() uint16 { return EDNS0DAU } +func (e *EDNS0_DAU) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_DAU) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_DAU) String() string { + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := AlgorithmToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +type EDNS0_DHU struct { + Code uint16 // Always EDNS0DHU + AlgCode []uint8 +} + +func (e *EDNS0_DHU) Option() uint16 { return EDNS0DHU } +func (e *EDNS0_DHU) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_DHU) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_DHU) String() string { + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := HashToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +type EDNS0_N3U struct { + Code uint16 // Always EDNS0N3U + AlgCode []uint8 +} + +func (e *EDNS0_N3U) Option() uint16 { return EDNS0N3U } +func (e *EDNS0_N3U) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_N3U) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_N3U) String() string { + // Re-use the hash map + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := HashToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +type EDNS0_EXPIRE struct { + Code uint16 // Always EDNS0EXPIRE + Expire uint32 +} + +func (e *EDNS0_EXPIRE) Option() uint16 { return EDNS0EXPIRE } +func (e *EDNS0_EXPIRE) String() string { return strconv.FormatUint(uint64(e.Expire), 10) } + +func (e *EDNS0_EXPIRE) pack() ([]byte, error) { + b := make([]byte, 4) + b[0] = byte(e.Expire >> 24) + b[1] = byte(e.Expire >> 16) + b[2] = byte(e.Expire >> 8) + b[3] = byte(e.Expire) + return b, nil +} + +func (e *EDNS0_EXPIRE) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Expire = uint32(b[0])<<24 | uint32(b[1])<<16 | uint32(b[2])<<8 | uint32(b[3]) + return nil +} + +// The EDNS0_LOCAL option is used for local/experimental purposes. The option +// code is recommended to be within the range [EDNS0LOCALSTART, EDNS0LOCALEND] +// (RFC6891), although any unassigned code can actually be used. The content of +// the option is made available in Data, unaltered. +// Basic use pattern for creating a local option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_LOCAL) +// e.Code = dns.EDNS0LOCALSTART +// e.Data = []byte{72, 82, 74} +// o.Option = append(o.Option, e) +type EDNS0_LOCAL struct { + Code uint16 + Data []byte +} + +func (e *EDNS0_LOCAL) Option() uint16 { return e.Code } +func (e *EDNS0_LOCAL) String() string { + return strconv.FormatInt(int64(e.Code), 10) + ":0x" + hex.EncodeToString(e.Data) +} + +func (e *EDNS0_LOCAL) pack() ([]byte, error) { + b := make([]byte, len(e.Data)) + copied := copy(b, e.Data) + if copied != len(e.Data) { + return nil, ErrBuf + } + return b, nil +} + +func (e *EDNS0_LOCAL) unpack(b []byte) error { + e.Data = make([]byte, len(b)) + copied := copy(e.Data, b) + if copied != len(b) { + return ErrBuf + } + return nil +} diff --git a/vendor/github.com/miekg/dns/format.go b/vendor/github.com/miekg/dns/format.go new file mode 100644 index 0000000..1ac1664 --- /dev/null +++ b/vendor/github.com/miekg/dns/format.go @@ -0,0 +1,96 @@ +package dns + +import ( + "net" + "reflect" + "strconv" +) + +// NumField returns the number of rdata fields r has. +func NumField(r RR) int { + return reflect.ValueOf(r).Elem().NumField() - 1 // Remove RR_Header +} + +// Field returns the rdata field i as a string. Fields are indexed starting from 1. +// RR types that holds slice data, for instance the NSEC type bitmap will return a single +// string where the types are concatenated using a space. +// Accessing non existing fields will cause a panic. +func Field(r RR, i int) string { + if i == 0 { + return "" + } + d := reflect.ValueOf(r).Elem().Field(i) + switch k := d.Kind(); k { + case reflect.String: + return d.String() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return strconv.FormatInt(d.Int(), 10) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return strconv.FormatUint(d.Uint(), 10) + case reflect.Slice: + switch reflect.ValueOf(r).Elem().Type().Field(i).Tag { + case `dns:"a"`: + // TODO(miek): Hmm store this as 16 bytes + if d.Len() < net.IPv6len { + return net.IPv4(byte(d.Index(0).Uint()), + byte(d.Index(1).Uint()), + byte(d.Index(2).Uint()), + byte(d.Index(3).Uint())).String() + } + return net.IPv4(byte(d.Index(12).Uint()), + byte(d.Index(13).Uint()), + byte(d.Index(14).Uint()), + byte(d.Index(15).Uint())).String() + case `dns:"aaaa"`: + return net.IP{ + byte(d.Index(0).Uint()), + byte(d.Index(1).Uint()), + byte(d.Index(2).Uint()), + byte(d.Index(3).Uint()), + byte(d.Index(4).Uint()), + byte(d.Index(5).Uint()), + byte(d.Index(6).Uint()), + byte(d.Index(7).Uint()), + byte(d.Index(8).Uint()), + byte(d.Index(9).Uint()), + byte(d.Index(10).Uint()), + byte(d.Index(11).Uint()), + byte(d.Index(12).Uint()), + byte(d.Index(13).Uint()), + byte(d.Index(14).Uint()), + byte(d.Index(15).Uint()), + }.String() + case `dns:"nsec"`: + if d.Len() == 0 { + return "" + } + s := Type(d.Index(0).Uint()).String() + for i := 1; i < d.Len(); i++ { + s += " " + Type(d.Index(i).Uint()).String() + } + return s + case `dns:"wks"`: + if d.Len() == 0 { + return "" + } + s := strconv.Itoa(int(d.Index(0).Uint())) + for i := 0; i < d.Len(); i++ { + s += " " + strconv.Itoa(int(d.Index(i).Uint())) + } + return s + default: + // if it does not have a tag its a string slice + fallthrough + case `dns:"txt"`: + if d.Len() == 0 { + return "" + } + s := d.Index(0).String() + for i := 1; i < d.Len(); i++ { + s += " " + d.Index(i).String() + } + return s + } + } + return "" +} diff --git a/vendor/github.com/miekg/dns/labels.go b/vendor/github.com/miekg/dns/labels.go new file mode 100644 index 0000000..3944dd0 --- /dev/null +++ b/vendor/github.com/miekg/dns/labels.go @@ -0,0 +1,162 @@ +package dns + +// Holds a bunch of helper functions for dealing with labels. + +// SplitDomainName splits a name string into it's labels. +// www.miek.nl. returns []string{"www", "miek", "nl"} +// The root label (.) returns nil. Note that using +// strings.Split(s) will work in most cases, but does not handle +// escaped dots (\.) for instance. +func SplitDomainName(s string) (labels []string) { + if len(s) == 0 { + return nil + } + fqdnEnd := 0 // offset of the final '.' or the length of the name + idx := Split(s) + begin := 0 + if s[len(s)-1] == '.' { + fqdnEnd = len(s) - 1 + } else { + fqdnEnd = len(s) + } + + switch len(idx) { + case 0: + return nil + case 1: + // no-op + default: + end := 0 + for i := 1; i < len(idx); i++ { + end = idx[i] + labels = append(labels, s[begin:end-1]) + begin = end + } + } + + labels = append(labels, s[begin:fqdnEnd]) + return labels +} + +// CompareDomainName compares the names s1 and s2 and +// returns how many labels they have in common starting from the *right*. +// The comparison stops at the first inequality. The names are not downcased +// before the comparison. +// +// www.miek.nl. and miek.nl. have two labels in common: miek and nl +// www.miek.nl. and www.bla.nl. have one label in common: nl +func CompareDomainName(s1, s2 string) (n int) { + s1 = Fqdn(s1) + s2 = Fqdn(s2) + l1 := Split(s1) + l2 := Split(s2) + + // the first check: root label + if l1 == nil || l2 == nil { + return + } + + j1 := len(l1) - 1 // end + i1 := len(l1) - 2 // start + j2 := len(l2) - 1 + i2 := len(l2) - 2 + // the second check can be done here: last/only label + // before we fall through into the for-loop below + if s1[l1[j1]:] == s2[l2[j2]:] { + n++ + } else { + return + } + for { + if i1 < 0 || i2 < 0 { + break + } + if s1[l1[i1]:l1[j1]] == s2[l2[i2]:l2[j2]] { + n++ + } else { + break + } + j1-- + i1-- + j2-- + i2-- + } + return +} + +// CountLabel counts the the number of labels in the string s. +func CountLabel(s string) (labels int) { + if s == "." { + return + } + off := 0 + end := false + for { + off, end = NextLabel(s, off) + labels++ + if end { + return + } + } +} + +// Split splits a name s into its label indexes. +// www.miek.nl. returns []int{0, 4, 9}, www.miek.nl also returns []int{0, 4, 9}. +// The root name (.) returns nil. Also see SplitDomainName. +func Split(s string) []int { + if s == "." { + return nil + } + idx := make([]int, 1, 3) + off := 0 + end := false + + for { + off, end = NextLabel(s, off) + if end { + return idx + } + idx = append(idx, off) + } +} + +// NextLabel returns the index of the start of the next label in the +// string s starting at offset. +// The bool end is true when the end of the string has been reached. +// Also see PrevLabel. +func NextLabel(s string, offset int) (i int, end bool) { + quote := false + for i = offset; i < len(s)-1; i++ { + switch s[i] { + case '\\': + quote = !quote + default: + quote = false + case '.': + if quote { + quote = !quote + continue + } + return i + 1, false + } + } + return i + 1, true +} + +// PrevLabel returns the index of the label when starting from the right and +// jumping n labels to the left. +// The bool start is true when the start of the string has been overshot. +// Also see NextLabel. +func PrevLabel(s string, n int) (i int, start bool) { + if n == 0 { + return len(s), false + } + lab := Split(s) + if lab == nil { + return 0, true + } + if n > len(lab) { + return 0, true + } + return lab[len(lab)-n], false +} diff --git a/vendor/github.com/miekg/dns/msg.go b/vendor/github.com/miekg/dns/msg.go new file mode 100644 index 0000000..3d13135 --- /dev/null +++ b/vendor/github.com/miekg/dns/msg.go @@ -0,0 +1,2030 @@ +// DNS packet assembly, see RFC 1035. Converting from - Unpack() - +// and to - Pack() - wire format. +// All the packers and unpackers take a (msg []byte, off int) +// and return (off1 int, ok bool). If they return ok==false, they +// also return off1==len(msg), so that the next unpacker will +// also fail. This lets us avoid checks of ok until the end of a +// packing sequence. + +package dns + +import ( + "encoding/base32" + "encoding/base64" + "encoding/hex" + "math/big" + "math/rand" + "net" + "reflect" + "strconv" + "time" +) + +const maxCompressionOffset = 2 << 13 // We have 14 bits for the compression pointer + +var ( + // ErrAlg indicates an error with the (DNSSEC) algorithm. + ErrAlg error = &Error{err: "bad algorithm"} + // ErrAuth indicates an error in the TSIG authentication. + ErrAuth error = &Error{err: "bad authentication"} + // ErrBuf indicates that the buffer used it too small for the message. + ErrBuf error = &Error{err: "buffer size too small"} + // ErrConnEmpty indicates a connection is being uses before it is initialized. + ErrConnEmpty error = &Error{err: "conn has no connection"} + // ErrExtendedRcode ... + ErrExtendedRcode error = &Error{err: "bad extended rcode"} + // ErrFqdn indicates that a domain name does not have a closing dot. + ErrFqdn error = &Error{err: "domain must be fully qualified"} + // ErrId indicates there is a mismatch with the message's ID. + ErrId error = &Error{err: "id mismatch"} + // ErrKeyAlg indicates that the algorithm in the key is not valid. + ErrKeyAlg error = &Error{err: "bad key algorithm"} + ErrKey error = &Error{err: "bad key"} + ErrKeySize error = &Error{err: "bad key size"} + ErrNoSig error = &Error{err: "no signature found"} + ErrPrivKey error = &Error{err: "bad private key"} + ErrRcode error = &Error{err: "bad rcode"} + ErrRdata error = &Error{err: "bad rdata"} + ErrRRset error = &Error{err: "bad rrset"} + ErrSecret error = &Error{err: "no secrets defined"} + ErrShortRead error = &Error{err: "short read"} + // ErrSig indicates that a signature can not be cryptographically validated. + ErrSig error = &Error{err: "bad signature"} + // ErrSOA indicates that no SOA RR was seen when doing zone transfers. + ErrSoa error = &Error{err: "no SOA"} + // ErrTime indicates a timing error in TSIG authentication. + ErrTime error = &Error{err: "bad time"} +) + +// Id, by default, returns a 16 bits random number to be used as a +// message id. The random provided should be good enough. This being a +// variable the function can be reassigned to a custom function. +// For instance, to make it return a static value: +// +// dns.Id = func() uint16 { return 3 } +var Id func() uint16 = id + +// MsgHdr is a a manually-unpacked version of (id, bits). +type MsgHdr struct { + Id uint16 + Response bool + Opcode int + Authoritative bool + Truncated bool + RecursionDesired bool + RecursionAvailable bool + Zero bool + AuthenticatedData bool + CheckingDisabled bool + Rcode int +} + +// Msg contains the layout of a DNS message. +type Msg struct { + MsgHdr + Compress bool `json:"-"` // If true, the message will be compressed when converted to wire format. This not part of the official DNS packet format. + Question []Question // Holds the RR(s) of the question section. + Answer []RR // Holds the RR(s) of the answer section. + Ns []RR // Holds the RR(s) of the authority section. + Extra []RR // Holds the RR(s) of the additional section. +} + +// TypeToString is a map of strings for each RR wire type. +var TypeToString = map[uint16]string{ + TypeA: "A", + TypeAAAA: "AAAA", + TypeAFSDB: "AFSDB", + TypeANY: "ANY", // Meta RR + TypeATMA: "ATMA", + TypeAXFR: "AXFR", // Meta RR + TypeCAA: "CAA", + TypeCDNSKEY: "CDNSKEY", + TypeCDS: "CDS", + TypeCERT: "CERT", + TypeCNAME: "CNAME", + TypeDHCID: "DHCID", + TypeDLV: "DLV", + TypeDNAME: "DNAME", + TypeDNSKEY: "DNSKEY", + TypeDS: "DS", + TypeEID: "EID", + TypeEUI48: "EUI48", + TypeEUI64: "EUI64", + TypeGID: "GID", + TypeGPOS: "GPOS", + TypeHINFO: "HINFO", + TypeHIP: "HIP", + TypeIPSECKEY: "IPSECKEY", + TypeISDN: "ISDN", + TypeIXFR: "IXFR", // Meta RR + TypeKEY: "KEY", + TypeKX: "KX", + TypeL32: "L32", + TypeL64: "L64", + TypeLOC: "LOC", + TypeLP: "LP", + TypeMB: "MB", + TypeMD: "MD", + TypeMF: "MF", + TypeMG: "MG", + TypeMINFO: "MINFO", + TypeMR: "MR", + TypeMX: "MX", + TypeNAPTR: "NAPTR", + TypeNID: "NID", + TypeNINFO: "NINFO", + TypeNIMLOC: "NIMLOC", + TypeNS: "NS", + TypeNSAPPTR: "NSAP-PTR", + TypeNSEC3: "NSEC3", + TypeNSEC3PARAM: "NSEC3PARAM", + TypeNSEC: "NSEC", + TypeNULL: "NULL", + TypeOPT: "OPT", + TypeOPENPGPKEY: "OPENPGPKEY", + TypePTR: "PTR", + TypeRKEY: "RKEY", + TypeRP: "RP", + TypeRRSIG: "RRSIG", + TypeRT: "RT", + TypeSIG: "SIG", + TypeSOA: "SOA", + TypeSPF: "SPF", + TypeSRV: "SRV", + TypeSSHFP: "SSHFP", + TypeTA: "TA", + TypeTALINK: "TALINK", + TypeTKEY: "TKEY", // Meta RR + TypeTLSA: "TLSA", + TypeTSIG: "TSIG", // Meta RR + TypeTXT: "TXT", + TypePX: "PX", + TypeUID: "UID", + TypeUINFO: "UINFO", + TypeUNSPEC: "UNSPEC", + TypeURI: "URI", + TypeWKS: "WKS", + TypeX25: "X25", +} + +// StringToType is the reverse of TypeToString, needed for string parsing. +var StringToType = reverseInt16(TypeToString) + +// StringToClass is the reverse of ClassToString, needed for string parsing. +var StringToClass = reverseInt16(ClassToString) + +// Map of opcodes strings. +var StringToOpcode = reverseInt(OpcodeToString) + +// Map of rcodes strings. +var StringToRcode = reverseInt(RcodeToString) + +// ClassToString is a maps Classes to strings for each CLASS wire type. +var ClassToString = map[uint16]string{ + ClassINET: "IN", + ClassCSNET: "CS", + ClassCHAOS: "CH", + ClassHESIOD: "HS", + ClassNONE: "NONE", + ClassANY: "ANY", +} + +// OpcodeToString maps Opcodes to strings. +var OpcodeToString = map[int]string{ + OpcodeQuery: "QUERY", + OpcodeIQuery: "IQUERY", + OpcodeStatus: "STATUS", + OpcodeNotify: "NOTIFY", + OpcodeUpdate: "UPDATE", +} + +// RcodeToString maps Rcodes to strings. +var RcodeToString = map[int]string{ + RcodeSuccess: "NOERROR", + RcodeFormatError: "FORMERR", + RcodeServerFailure: "SERVFAIL", + RcodeNameError: "NXDOMAIN", + RcodeNotImplemented: "NOTIMPL", + RcodeRefused: "REFUSED", + RcodeYXDomain: "YXDOMAIN", // From RFC 2136 + RcodeYXRrset: "YXRRSET", + RcodeNXRrset: "NXRRSET", + RcodeNotAuth: "NOTAUTH", + RcodeNotZone: "NOTZONE", + RcodeBadSig: "BADSIG", // Also known as RcodeBadVers, see RFC 6891 + // RcodeBadVers: "BADVERS", + RcodeBadKey: "BADKEY", + RcodeBadTime: "BADTIME", + RcodeBadMode: "BADMODE", + RcodeBadName: "BADNAME", + RcodeBadAlg: "BADALG", + RcodeBadTrunc: "BADTRUNC", +} + +// Rather than write the usual handful of routines to pack and +// unpack every message that can appear on the wire, we use +// reflection to write a generic pack/unpack for structs and then +// use it. Thus, if in the future we need to define new message +// structs, no new pack/unpack/printing code needs to be written. + +// Domain names are a sequence of counted strings +// split at the dots. They end with a zero-length string. + +// PackDomainName packs a domain name s into msg[off:]. +// If compression is wanted compress must be true and the compression +// map needs to hold a mapping between domain names and offsets +// pointing into msg. +func PackDomainName(s string, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + off1, _, err = packDomainName(s, msg, off, compression, compress) + return +} + +func packDomainName(s string, msg []byte, off int, compression map[string]int, compress bool) (off1 int, labels int, err error) { + // special case if msg == nil + lenmsg := 256 + if msg != nil { + lenmsg = len(msg) + } + ls := len(s) + if ls == 0 { // Ok, for instance when dealing with update RR without any rdata. + return off, 0, nil + } + // If not fully qualified, error out, but only if msg == nil #ugly + switch { + case msg == nil: + if s[ls-1] != '.' { + s += "." + ls++ + } + case msg != nil: + if s[ls-1] != '.' { + return lenmsg, 0, ErrFqdn + } + } + // Each dot ends a segment of the name. + // We trade each dot byte for a length byte. + // Except for escaped dots (\.), which are normal dots. + // There is also a trailing zero. + + // Compression + nameoffset := -1 + pointer := -1 + // Emit sequence of counted strings, chopping at dots. + begin := 0 + bs := []byte(s) + roBs, bsFresh, escapedDot := s, true, false + for i := 0; i < ls; i++ { + if bs[i] == '\\' { + for j := i; j < ls-1; j++ { + bs[j] = bs[j+1] + } + ls-- + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + // check for \DDD + if i+2 < ls && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + bs[i] = dddToByte(bs[i:]) + for j := i + 1; j < ls-2; j++ { + bs[j] = bs[j+2] + } + ls -= 2 + } else if bs[i] == 't' { + bs[i] = '\t' + } else if bs[i] == 'r' { + bs[i] = '\r' + } else if bs[i] == 'n' { + bs[i] = '\n' + } + escapedDot = bs[i] == '.' + bsFresh = false + continue + } + + if bs[i] == '.' { + if i > 0 && bs[i-1] == '.' && !escapedDot { + // two dots back to back is not legal + return lenmsg, labels, ErrRdata + } + if i-begin >= 1<<6 { // top two bits of length must be clear + return lenmsg, labels, ErrRdata + } + // off can already (we're in a loop) be bigger than len(msg) + // this happens when a name isn't fully qualified + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + if msg != nil { + msg[off] = byte(i - begin) + } + offset := off + off++ + for j := begin; j < i; j++ { + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + if msg != nil { + msg[off] = bs[j] + } + off++ + } + if compress && !bsFresh { + roBs = string(bs) + bsFresh = true + } + // Dont try to compress '.' + if compress && roBs[begin:] != "." { + if p, ok := compression[roBs[begin:]]; !ok { + // Only offsets smaller than this can be used. + if offset < maxCompressionOffset { + compression[roBs[begin:]] = offset + } + } else { + // The first hit is the longest matching dname + // keep the pointer offset we get back and store + // the offset of the current name, because that's + // where we need to insert the pointer later + + // If compress is true, we're allowed to compress this dname + if pointer == -1 && compress { + pointer = p // Where to point to + nameoffset = offset // Where to point from + break + } + } + } + labels++ + begin = i + 1 + } + escapedDot = false + } + // Root label is special + if len(bs) == 1 && bs[0] == '.' { + return off, labels, nil + } + // If we did compression and we find something add the pointer here + if pointer != -1 { + // We have two bytes (14 bits) to put the pointer in + // if msg == nil, we will never do compression + msg[nameoffset], msg[nameoffset+1] = packUint16(uint16(pointer ^ 0xC000)) + off = nameoffset + 1 + goto End + } + if msg != nil { + msg[off] = 0 + } +End: + off++ + return off, labels, nil +} + +// Unpack a domain name. +// In addition to the simple sequences of counted strings above, +// domain names are allowed to refer to strings elsewhere in the +// packet, to avoid repeating common suffixes when returning +// many entries in a single domain. The pointers are marked +// by a length byte with the top two bits set. Ignoring those +// two bits, that byte and the next give a 14 bit offset from msg[0] +// where we should pick up the trail. +// Note that if we jump elsewhere in the packet, +// we return off1 == the offset after the first pointer we found, +// which is where the next record will start. +// In theory, the pointers are only allowed to jump backward. +// We let them jump anywhere and stop jumping after a while. + +// UnpackDomainName unpacks a domain name into a string. +func UnpackDomainName(msg []byte, off int) (string, int, error) { + s := make([]byte, 0, 64) + off1 := 0 + lenmsg := len(msg) + ptr := 0 // number of pointers followed +Loop: + for { + if off >= lenmsg { + return "", lenmsg, ErrBuf + } + c := int(msg[off]) + off++ + switch c & 0xC0 { + case 0x00: + if c == 0x00 { + // end of name + break Loop + } + // literal string + if off+c > lenmsg { + return "", lenmsg, ErrBuf + } + for j := off; j < off+c; j++ { + switch b := msg[j]; b { + case '.', '(', ')', ';', ' ', '@': + fallthrough + case '"', '\\': + s = append(s, '\\', b) + case '\t': + s = append(s, '\\', 't') + case '\r': + s = append(s, '\\', 'r') + default: + if b < 32 || b >= 127 { // unprintable use \DDD + var buf [3]byte + bufs := strconv.AppendInt(buf[:0], int64(b), 10) + s = append(s, '\\') + for i := 0; i < 3-len(bufs); i++ { + s = append(s, '0') + } + for _, r := range bufs { + s = append(s, r) + } + } else { + s = append(s, b) + } + } + } + s = append(s, '.') + off += c + case 0xC0: + // pointer to somewhere else in msg. + // remember location after first ptr, + // since that's how many bytes we consumed. + // also, don't follow too many pointers -- + // maybe there's a loop. + if off >= lenmsg { + return "", lenmsg, ErrBuf + } + c1 := msg[off] + off++ + if ptr == 0 { + off1 = off + } + if ptr++; ptr > 10 { + return "", lenmsg, &Error{err: "too many compression pointers"} + } + off = (c^0xC0)<<8 | int(c1) + default: + // 0x80 and 0x40 are reserved + return "", lenmsg, ErrRdata + } + } + if ptr == 0 { + off1 = off + } + if len(s) == 0 { + s = []byte(".") + } + return string(s), off1, nil +} + +func packTxt(txt []string, msg []byte, offset int, tmp []byte) (int, error) { + var err error + if len(txt) == 0 { + if offset >= len(msg) { + return offset, ErrBuf + } + msg[offset] = 0 + return offset, nil + } + for i := range txt { + if len(txt[i]) > len(tmp) { + return offset, ErrBuf + } + offset, err = packTxtString(txt[i], msg, offset, tmp) + if err != nil { + return offset, err + } + } + return offset, err +} + +func packTxtString(s string, msg []byte, offset int, tmp []byte) (int, error) { + lenByteOffset := offset + if offset >= len(msg) { + return offset, ErrBuf + } + offset++ + bs := tmp[:len(s)] + copy(bs, s) + for i := 0; i < len(bs); i++ { + if len(msg) <= offset { + return offset, ErrBuf + } + if bs[i] == '\\' { + i++ + if i == len(bs) { + break + } + // check for \DDD + if i+2 < len(bs) && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + msg[offset] = dddToByte(bs[i:]) + i += 2 + } else if bs[i] == 't' { + msg[offset] = '\t' + } else if bs[i] == 'r' { + msg[offset] = '\r' + } else if bs[i] == 'n' { + msg[offset] = '\n' + } else { + msg[offset] = bs[i] + } + } else { + msg[offset] = bs[i] + } + offset++ + } + l := offset - lenByteOffset - 1 + if l > 255 { + return offset, &Error{err: "string exceeded 255 bytes in txt"} + } + msg[lenByteOffset] = byte(l) + return offset, nil +} + +func packOctetString(s string, msg []byte, offset int, tmp []byte) (int, error) { + if offset >= len(msg) { + return offset, ErrBuf + } + bs := tmp[:len(s)] + copy(bs, s) + for i := 0; i < len(bs); i++ { + if len(msg) <= offset { + return offset, ErrBuf + } + if bs[i] == '\\' { + i++ + if i == len(bs) { + break + } + // check for \DDD + if i+2 < len(bs) && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + msg[offset] = dddToByte(bs[i:]) + i += 2 + } else { + msg[offset] = bs[i] + } + } else { + msg[offset] = bs[i] + } + offset++ + } + return offset, nil +} + +func unpackTxt(msg []byte, off0 int) (ss []string, off int, err error) { + off = off0 + var s string + for off < len(msg) && err == nil { + s, off, err = unpackTxtString(msg, off) + if err == nil { + ss = append(ss, s) + } + } + return +} + +func unpackTxtString(msg []byte, offset int) (string, int, error) { + if offset+1 > len(msg) { + return "", offset, &Error{err: "overflow unpacking txt"} + } + l := int(msg[offset]) + if offset+l+1 > len(msg) { + return "", offset, &Error{err: "overflow unpacking txt"} + } + s := make([]byte, 0, l) + for _, b := range msg[offset+1 : offset+1+l] { + switch b { + case '"', '\\': + s = append(s, '\\', b) + case '\t': + s = append(s, `\t`...) + case '\r': + s = append(s, `\r`...) + case '\n': + s = append(s, `\n`...) + default: + if b < 32 || b > 127 { // unprintable + var buf [3]byte + bufs := strconv.AppendInt(buf[:0], int64(b), 10) + s = append(s, '\\') + for i := 0; i < 3-len(bufs); i++ { + s = append(s, '0') + } + for _, r := range bufs { + s = append(s, r) + } + } else { + s = append(s, b) + } + } + } + offset += 1 + l + return string(s), offset, nil +} + +// Pack a reflect.StructValue into msg. Struct members can only be uint8, uint16, uint32, string, +// slices and other (often anonymous) structs. +func packStructValue(val reflect.Value, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + var txtTmp []byte + lenmsg := len(msg) + numfield := val.NumField() + for i := 0; i < numfield; i++ { + typefield := val.Type().Field(i) + if typefield.Tag == `dns:"-"` { + continue + } + switch fv := val.Field(i); fv.Kind() { + default: + return lenmsg, &Error{err: "bad kind packing"} + case reflect.Interface: + // PrivateRR is the only RR implementation that has interface field. + // therefore it's expected that this interface would be PrivateRdata + switch data := fv.Interface().(type) { + case PrivateRdata: + n, err := data.Pack(msg[off:]) + if err != nil { + return lenmsg, err + } + off += n + default: + return lenmsg, &Error{err: "bad kind interface packing"} + } + case reflect.Slice: + switch typefield.Tag { + default: + return lenmsg, &Error{"bad tag packing slice: " + typefield.Tag.Get("dns")} + case `dns:"domain-name"`: + for j := 0; j < val.Field(i).Len(); j++ { + element := val.Field(i).Index(j).String() + off, err = PackDomainName(element, msg, off, compression, false && compress) + if err != nil { + return lenmsg, err + } + } + case `dns:"txt"`: + if txtTmp == nil { + txtTmp = make([]byte, 256*4+1) + } + off, err = packTxt(fv.Interface().([]string), msg, off, txtTmp) + if err != nil { + return lenmsg, err + } + case `dns:"opt"`: // edns + for j := 0; j < val.Field(i).Len(); j++ { + element := val.Field(i).Index(j).Interface() + b, e := element.(EDNS0).pack() + if e != nil { + return lenmsg, &Error{err: "overflow packing opt"} + } + // Option code + msg[off], msg[off+1] = packUint16(element.(EDNS0).Option()) + // Length + msg[off+2], msg[off+3] = packUint16(uint16(len(b))) + off += 4 + if off+len(b) > lenmsg { + copy(msg[off:], b) + off = lenmsg + continue + } + // Actual data + copy(msg[off:off+len(b)], b) + off += len(b) + } + case `dns:"a"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, must be 1 + if val.Field(2).Uint() != 1 { + continue + } + } + // It must be a slice of 4, even if it is 16, we encode + // only the first 4 + if off+net.IPv4len > lenmsg { + return lenmsg, &Error{err: "overflow packing a"} + } + switch fv.Len() { + case net.IPv6len: + msg[off] = byte(fv.Index(12).Uint()) + msg[off+1] = byte(fv.Index(13).Uint()) + msg[off+2] = byte(fv.Index(14).Uint()) + msg[off+3] = byte(fv.Index(15).Uint()) + off += net.IPv4len + case net.IPv4len: + msg[off] = byte(fv.Index(0).Uint()) + msg[off+1] = byte(fv.Index(1).Uint()) + msg[off+2] = byte(fv.Index(2).Uint()) + msg[off+3] = byte(fv.Index(3).Uint()) + off += net.IPv4len + case 0: + // Allowed, for dynamic updates + default: + return lenmsg, &Error{err: "overflow packing a"} + } + case `dns:"aaaa"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, must be 2 + if val.Field(2).Uint() != 2 { + continue + } + } + if fv.Len() == 0 { + break + } + if fv.Len() > net.IPv6len || off+fv.Len() > lenmsg { + return lenmsg, &Error{err: "overflow packing aaaa"} + } + for j := 0; j < net.IPv6len; j++ { + msg[off] = byte(fv.Index(j).Uint()) + off++ + } + case `dns:"wks"`: + // TODO(miek): this is wrong should be lenrd + if off == lenmsg { + break // dyn. updates + } + if val.Field(i).Len() == 0 { + break + } + off1 := off + for j := 0; j < val.Field(i).Len(); j++ { + serv := int(fv.Index(j).Uint()) + if off+serv/8+1 > len(msg) { + return len(msg), &Error{err: "overflow packing wks"} + } + msg[off+serv/8] |= byte(1 << (7 - uint(serv%8))) + if off+serv/8+1 > off1 { + off1 = off + serv/8 + 1 + } + } + off = off1 + case `dns:"nsec"`: // NSEC/NSEC3 + // This is the uint16 type bitmap + if val.Field(i).Len() == 0 { + // Do absolutely nothing + break + } + var lastwindow, lastlength uint16 + for j := 0; j < val.Field(i).Len(); j++ { + t := uint16(fv.Index(j).Uint()) + window := t / 256 + length := (t-window*256)/8 + 1 + if window > lastwindow && lastlength != 0 { + // New window, jump to the new offset + off += int(lastlength) + 2 + lastlength = 0 + } + if window < lastwindow || length < lastlength { + return len(msg), &Error{err: "nsec bits out of order"} + } + if off+2+int(length) > len(msg) { + return len(msg), &Error{err: "overflow packing nsec"} + } + // Setting the window # + msg[off] = byte(window) + // Setting the octets length + msg[off+1] = byte(length) + // Setting the bit value for the type in the right octet + msg[off+1+int(length)] |= byte(1 << (7 - (t % 8))) + lastwindow, lastlength = window, length + } + off += int(lastlength) + 2 + } + case reflect.Struct: + off, err = packStructValue(fv, msg, off, compression, compress) + if err != nil { + return lenmsg, err + } + case reflect.Uint8: + if off+1 > lenmsg { + return lenmsg, &Error{err: "overflow packing uint8"} + } + msg[off] = byte(fv.Uint()) + off++ + case reflect.Uint16: + if off+2 > lenmsg { + return lenmsg, &Error{err: "overflow packing uint16"} + } + i := fv.Uint() + msg[off] = byte(i >> 8) + msg[off+1] = byte(i) + off += 2 + case reflect.Uint32: + if off+4 > lenmsg { + return lenmsg, &Error{err: "overflow packing uint32"} + } + i := fv.Uint() + msg[off] = byte(i >> 24) + msg[off+1] = byte(i >> 16) + msg[off+2] = byte(i >> 8) + msg[off+3] = byte(i) + off += 4 + case reflect.Uint64: + switch typefield.Tag { + default: + if off+8 > lenmsg { + return lenmsg, &Error{err: "overflow packing uint64"} + } + i := fv.Uint() + msg[off] = byte(i >> 56) + msg[off+1] = byte(i >> 48) + msg[off+2] = byte(i >> 40) + msg[off+3] = byte(i >> 32) + msg[off+4] = byte(i >> 24) + msg[off+5] = byte(i >> 16) + msg[off+6] = byte(i >> 8) + msg[off+7] = byte(i) + off += 8 + case `dns:"uint48"`: + // Used in TSIG, where it stops at 48 bits, so we discard the upper 16 + if off+6 > lenmsg { + return lenmsg, &Error{err: "overflow packing uint64 as uint48"} + } + i := fv.Uint() + msg[off] = byte(i >> 40) + msg[off+1] = byte(i >> 32) + msg[off+2] = byte(i >> 24) + msg[off+3] = byte(i >> 16) + msg[off+4] = byte(i >> 8) + msg[off+5] = byte(i) + off += 6 + } + case reflect.String: + // There are multiple string encodings. + // The tag distinguishes ordinary strings from domain names. + s := fv.String() + switch typefield.Tag { + default: + return lenmsg, &Error{"bad tag packing string: " + typefield.Tag.Get("dns")} + case `dns:"base64"`: + b64, e := fromBase64([]byte(s)) + if e != nil { + return lenmsg, e + } + copy(msg[off:off+len(b64)], b64) + off += len(b64) + case `dns:"domain-name"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, 1 and 2 or used for addresses + x := val.Field(2).Uint() + if x == 1 || x == 2 { + continue + } + } + if off, err = PackDomainName(s, msg, off, compression, false && compress); err != nil { + return lenmsg, err + } + case `dns:"cdomain-name"`: + if off, err = PackDomainName(s, msg, off, compression, true && compress); err != nil { + return lenmsg, err + } + case `dns:"size-base32"`: + // This is purely for NSEC3 atm, the previous byte must + // holds the length of the encoded string. As NSEC3 + // is only defined to SHA1, the hashlength is 20 (160 bits) + msg[off-1] = 20 + fallthrough + case `dns:"base32"`: + b32, e := fromBase32([]byte(s)) + if e != nil { + return lenmsg, e + } + copy(msg[off:off+len(b32)], b32) + off += len(b32) + case `dns:"size-hex"`: + fallthrough + case `dns:"hex"`: + // There is no length encoded here + h, e := hex.DecodeString(s) + if e != nil { + return lenmsg, e + } + if off+hex.DecodedLen(len(s)) > lenmsg { + return lenmsg, &Error{err: "overflow packing hex"} + } + copy(msg[off:off+hex.DecodedLen(len(s))], h) + off += hex.DecodedLen(len(s)) + case `dns:"size"`: + // the size is already encoded in the RR, we can safely use the + // length of string. String is RAW (not encoded in hex, nor base64) + copy(msg[off:off+len(s)], s) + off += len(s) + case `dns:"octet"`: + bytesTmp := make([]byte, 256) + off, err = packOctetString(fv.String(), msg, off, bytesTmp) + if err != nil { + return lenmsg, err + } + case `dns:"txt"`: + fallthrough + case "": + if txtTmp == nil { + txtTmp = make([]byte, 256*4+1) + } + off, err = packTxtString(fv.String(), msg, off, txtTmp) + if err != nil { + return lenmsg, err + } + } + } + } + return off, nil +} + +func structValue(any interface{}) reflect.Value { + return reflect.ValueOf(any).Elem() +} + +// PackStruct packs any structure to wire format. +func PackStruct(any interface{}, msg []byte, off int) (off1 int, err error) { + off, err = packStructValue(structValue(any), msg, off, nil, false) + return off, err +} + +func packStructCompress(any interface{}, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + off, err = packStructValue(structValue(any), msg, off, compression, compress) + return off, err +} + +// Unpack a reflect.StructValue from msg. +// Same restrictions as packStructValue. +func unpackStructValue(val reflect.Value, msg []byte, off int) (off1 int, err error) { + lenmsg := len(msg) + for i := 0; i < val.NumField(); i++ { + if off > lenmsg { + return lenmsg, &Error{"bad offset unpacking"} + } + switch fv := val.Field(i); fv.Kind() { + default: + return lenmsg, &Error{err: "bad kind unpacking"} + case reflect.Interface: + // PrivateRR is the only RR implementation that has interface field. + // therefore it's expected that this interface would be PrivateRdata + switch data := fv.Interface().(type) { + case PrivateRdata: + n, err := data.Unpack(msg[off:]) + if err != nil { + return lenmsg, err + } + off += n + default: + return lenmsg, &Error{err: "bad kind interface unpacking"} + } + case reflect.Slice: + switch val.Type().Field(i).Tag { + default: + return lenmsg, &Error{"bad tag unpacking slice: " + val.Type().Field(i).Tag.Get("dns")} + case `dns:"domain-name"`: + // HIP record slice of name (or none) + var servers []string + var s string + for off < lenmsg { + s, off, err = UnpackDomainName(msg, off) + if err != nil { + return lenmsg, err + } + servers = append(servers, s) + } + fv.Set(reflect.ValueOf(servers)) + case `dns:"txt"`: + if off == lenmsg { + break + } + var txt []string + txt, off, err = unpackTxt(msg, off) + if err != nil { + return lenmsg, err + } + fv.Set(reflect.ValueOf(txt)) + case `dns:"opt"`: // edns0 + if off == lenmsg { + // This is an EDNS0 (OPT Record) with no rdata + // We can safely return here. + break + } + var edns []EDNS0 + Option: + code := uint16(0) + if off+4 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking opt"} + } + code, off = unpackUint16(msg, off) + optlen, off1 := unpackUint16(msg, off) + if off1+int(optlen) > lenmsg { + return lenmsg, &Error{err: "overflow unpacking opt"} + } + switch code { + case EDNS0NSID: + e := new(EDNS0_NSID) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + case EDNS0SUBNET, EDNS0SUBNETDRAFT: + e := new(EDNS0_SUBNET) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + if code == EDNS0SUBNETDRAFT { + e.DraftOption = true + } + case EDNS0UL: + e := new(EDNS0_UL) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + case EDNS0LLQ: + e := new(EDNS0_LLQ) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + case EDNS0DAU: + e := new(EDNS0_DAU) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + case EDNS0DHU: + e := new(EDNS0_DHU) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + case EDNS0N3U: + e := new(EDNS0_N3U) + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + default: + e := new(EDNS0_LOCAL) + e.Code = code + if err := e.unpack(msg[off1 : off1+int(optlen)]); err != nil { + return lenmsg, err + } + edns = append(edns, e) + off = off1 + int(optlen) + } + if off < lenmsg { + goto Option + } + fv.Set(reflect.ValueOf(edns)) + case `dns:"a"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, must be 1 + if val.Field(2).Uint() != 1 { + continue + } + } + if off == lenmsg { + break // dyn. update + } + if off+net.IPv4len > lenmsg { + return lenmsg, &Error{err: "overflow unpacking a"} + } + fv.Set(reflect.ValueOf(net.IPv4(msg[off], msg[off+1], msg[off+2], msg[off+3]))) + off += net.IPv4len + case `dns:"aaaa"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, must be 2 + if val.Field(2).Uint() != 2 { + continue + } + } + if off == lenmsg { + break + } + if off+net.IPv6len > lenmsg { + return lenmsg, &Error{err: "overflow unpacking aaaa"} + } + fv.Set(reflect.ValueOf(net.IP{msg[off], msg[off+1], msg[off+2], msg[off+3], msg[off+4], + msg[off+5], msg[off+6], msg[off+7], msg[off+8], msg[off+9], msg[off+10], + msg[off+11], msg[off+12], msg[off+13], msg[off+14], msg[off+15]})) + off += net.IPv6len + case `dns:"wks"`: + // Rest of the record is the bitmap + var serv []uint16 + j := 0 + for off < lenmsg { + if off+1 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking wks"} + } + b := msg[off] + // Check the bits one by one, and set the type + if b&0x80 == 0x80 { + serv = append(serv, uint16(j*8+0)) + } + if b&0x40 == 0x40 { + serv = append(serv, uint16(j*8+1)) + } + if b&0x20 == 0x20 { + serv = append(serv, uint16(j*8+2)) + } + if b&0x10 == 0x10 { + serv = append(serv, uint16(j*8+3)) + } + if b&0x8 == 0x8 { + serv = append(serv, uint16(j*8+4)) + } + if b&0x4 == 0x4 { + serv = append(serv, uint16(j*8+5)) + } + if b&0x2 == 0x2 { + serv = append(serv, uint16(j*8+6)) + } + if b&0x1 == 0x1 { + serv = append(serv, uint16(j*8+7)) + } + j++ + off++ + } + fv.Set(reflect.ValueOf(serv)) + case `dns:"nsec"`: // NSEC/NSEC3 + if off == len(msg) { + break + } + // Rest of the record is the type bitmap + var nsec []uint16 + length := 0 + window := 0 + lastwindow := -1 + for off < len(msg) { + if off+2 > len(msg) { + return len(msg), &Error{err: "overflow unpacking nsecx"} + } + window = int(msg[off]) + length = int(msg[off+1]) + off += 2 + if window <= lastwindow { + // RFC 4034: Blocks are present in the NSEC RR RDATA in + // increasing numerical order. + return len(msg), &Error{err: "out of order NSEC block"} + } + if length == 0 { + // RFC 4034: Blocks with no types present MUST NOT be included. + return len(msg), &Error{err: "empty NSEC block"} + } + if length > 32 { + return len(msg), &Error{err: "NSEC block too long"} + } + if off+length > len(msg) { + return len(msg), &Error{err: "overflowing NSEC block"} + } + + // Walk the bytes in the window and extract the type bits + for j := 0; j < length; j++ { + b := msg[off+j] + // Check the bits one by one, and set the type + if b&0x80 == 0x80 { + nsec = append(nsec, uint16(window*256+j*8+0)) + } + if b&0x40 == 0x40 { + nsec = append(nsec, uint16(window*256+j*8+1)) + } + if b&0x20 == 0x20 { + nsec = append(nsec, uint16(window*256+j*8+2)) + } + if b&0x10 == 0x10 { + nsec = append(nsec, uint16(window*256+j*8+3)) + } + if b&0x8 == 0x8 { + nsec = append(nsec, uint16(window*256+j*8+4)) + } + if b&0x4 == 0x4 { + nsec = append(nsec, uint16(window*256+j*8+5)) + } + if b&0x2 == 0x2 { + nsec = append(nsec, uint16(window*256+j*8+6)) + } + if b&0x1 == 0x1 { + nsec = append(nsec, uint16(window*256+j*8+7)) + } + } + off += length + lastwindow = window + } + fv.Set(reflect.ValueOf(nsec)) + } + case reflect.Struct: + off, err = unpackStructValue(fv, msg, off) + if err != nil { + return lenmsg, err + } + if val.Type().Field(i).Name == "Hdr" { + lenrd := off + int(val.FieldByName("Hdr").FieldByName("Rdlength").Uint()) + if lenrd > lenmsg { + return lenmsg, &Error{err: "overflowing header size"} + } + msg = msg[:lenrd] + lenmsg = len(msg) + } + case reflect.Uint8: + if off == lenmsg { + break + } + if off+1 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking uint8"} + } + fv.SetUint(uint64(uint8(msg[off]))) + off++ + case reflect.Uint16: + if off == lenmsg { + break + } + var i uint16 + if off+2 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking uint16"} + } + i, off = unpackUint16(msg, off) + fv.SetUint(uint64(i)) + case reflect.Uint32: + if off == lenmsg { + break + } + if off+4 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking uint32"} + } + fv.SetUint(uint64(uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3]))) + off += 4 + case reflect.Uint64: + if off == lenmsg { + break + } + switch val.Type().Field(i).Tag { + default: + if off+8 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking uint64"} + } + fv.SetUint(uint64(uint64(msg[off])<<56 | uint64(msg[off+1])<<48 | uint64(msg[off+2])<<40 | + uint64(msg[off+3])<<32 | uint64(msg[off+4])<<24 | uint64(msg[off+5])<<16 | uint64(msg[off+6])<<8 | uint64(msg[off+7]))) + off += 8 + case `dns:"uint48"`: + // Used in TSIG where the last 48 bits are occupied, so for now, assume a uint48 (6 bytes) + if off+6 > lenmsg { + return lenmsg, &Error{err: "overflow unpacking uint64 as uint48"} + } + fv.SetUint(uint64(uint64(msg[off])<<40 | uint64(msg[off+1])<<32 | uint64(msg[off+2])<<24 | uint64(msg[off+3])<<16 | + uint64(msg[off+4])<<8 | uint64(msg[off+5]))) + off += 6 + } + case reflect.String: + var s string + if off == lenmsg { + break + } + switch val.Type().Field(i).Tag { + default: + return lenmsg, &Error{"bad tag unpacking string: " + val.Type().Field(i).Tag.Get("dns")} + case `dns:"octet"`: + s = string(msg[off:]) + off = lenmsg + case `dns:"hex"`: + hexend := lenmsg + if val.FieldByName("Hdr").FieldByName("Rrtype").Uint() == uint64(TypeHIP) { + hexend = off + int(val.FieldByName("HitLength").Uint()) + } + if hexend > lenmsg { + return lenmsg, &Error{err: "overflow unpacking HIP hex"} + } + s = hex.EncodeToString(msg[off:hexend]) + off = hexend + case `dns:"base64"`: + // Rest of the RR is base64 encoded value + b64end := lenmsg + if val.FieldByName("Hdr").FieldByName("Rrtype").Uint() == uint64(TypeHIP) { + b64end = off + int(val.FieldByName("PublicKeyLength").Uint()) + } + if b64end > lenmsg { + return lenmsg, &Error{err: "overflow unpacking HIP base64"} + } + s = toBase64(msg[off:b64end]) + off = b64end + case `dns:"cdomain-name"`: + fallthrough + case `dns:"domain-name"`: + if val.Type().String() == "dns.IPSECKEY" { + // Field(2) is GatewayType, 1 and 2 or used for addresses + x := val.Field(2).Uint() + if x == 1 || x == 2 { + continue + } + } + if off == lenmsg { + // zero rdata foo, OK for dyn. updates + break + } + s, off, err = UnpackDomainName(msg, off) + if err != nil { + return lenmsg, err + } + case `dns:"size-base32"`: + var size int + switch val.Type().Name() { + case "NSEC3": + switch val.Type().Field(i).Name { + case "NextDomain": + name := val.FieldByName("HashLength") + size = int(name.Uint()) + } + } + if off+size > lenmsg { + return lenmsg, &Error{err: "overflow unpacking base32"} + } + s = toBase32(msg[off : off+size]) + off += size + case `dns:"size-hex"`: + // a "size" string, but it must be encoded in hex in the string + var size int + switch val.Type().Name() { + case "NSEC3": + switch val.Type().Field(i).Name { + case "Salt": + name := val.FieldByName("SaltLength") + size = int(name.Uint()) + case "NextDomain": + name := val.FieldByName("HashLength") + size = int(name.Uint()) + } + case "TSIG": + switch val.Type().Field(i).Name { + case "MAC": + name := val.FieldByName("MACSize") + size = int(name.Uint()) + case "OtherData": + name := val.FieldByName("OtherLen") + size = int(name.Uint()) + } + } + if off+size > lenmsg { + return lenmsg, &Error{err: "overflow unpacking hex"} + } + s = hex.EncodeToString(msg[off : off+size]) + off += size + case `dns:"txt"`: + fallthrough + case "": + s, off, err = unpackTxtString(msg, off) + } + fv.SetString(s) + } + } + return off, nil +} + +// Helpers for dealing with escaped bytes +func isDigit(b byte) bool { return b >= '0' && b <= '9' } + +func dddToByte(s []byte) byte { + return byte((s[0]-'0')*100 + (s[1]-'0')*10 + (s[2] - '0')) +} + +// UnpackStruct unpacks a binary message from offset off to the interface +// value given. +func UnpackStruct(any interface{}, msg []byte, off int) (int, error) { + return unpackStructValue(structValue(any), msg, off) +} + +// Helper function for packing and unpacking +func intToBytes(i *big.Int, length int) []byte { + buf := i.Bytes() + if len(buf) < length { + b := make([]byte, length) + copy(b[length-len(buf):], buf) + return b + } + return buf +} + +func unpackUint16(msg []byte, off int) (uint16, int) { + return uint16(msg[off])<<8 | uint16(msg[off+1]), off + 2 +} + +func packUint16(i uint16) (byte, byte) { + return byte(i >> 8), byte(i) +} + +func toBase32(b []byte) string { + return base32.HexEncoding.EncodeToString(b) +} + +func fromBase32(s []byte) (buf []byte, err error) { + buflen := base32.HexEncoding.DecodedLen(len(s)) + buf = make([]byte, buflen) + n, err := base32.HexEncoding.Decode(buf, s) + buf = buf[:n] + return +} + +func toBase64(b []byte) string { + return base64.StdEncoding.EncodeToString(b) +} + +func fromBase64(s []byte) (buf []byte, err error) { + buflen := base64.StdEncoding.DecodedLen(len(s)) + buf = make([]byte, buflen) + n, err := base64.StdEncoding.Decode(buf, s) + buf = buf[:n] + return +} + +// PackRR packs a resource record rr into msg[off:]. +// See PackDomainName for documentation about the compression. +func PackRR(rr RR, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + if rr == nil { + return len(msg), &Error{err: "nil rr"} + } + + off1, err = packStructCompress(rr, msg, off, compression, compress) + if err != nil { + return len(msg), err + } + if rawSetRdlength(msg, off, off1) { + return off1, nil + } + return off, ErrRdata +} + +// UnpackRR unpacks msg[off:] into an RR. +func UnpackRR(msg []byte, off int) (rr RR, off1 int, err error) { + // unpack just the header, to find the rr type and length + var h RR_Header + off0 := off + if off, err = UnpackStruct(&h, msg, off); err != nil { + return nil, len(msg), err + } + end := off + int(h.Rdlength) + // make an rr of that type and re-unpack. + mk, known := typeToRR[h.Rrtype] + if !known { + rr = new(RFC3597) + } else { + rr = mk() + } + off, err = UnpackStruct(rr, msg, off0) + if off != end { + return &h, end, &Error{err: "bad rdlength"} + } + return rr, off, err +} + +// Reverse a map +func reverseInt8(m map[uint8]string) map[string]uint8 { + n := make(map[string]uint8) + for u, s := range m { + n[s] = u + } + return n +} + +func reverseInt16(m map[uint16]string) map[string]uint16 { + n := make(map[string]uint16) + for u, s := range m { + n[s] = u + } + return n +} + +func reverseInt(m map[int]string) map[string]int { + n := make(map[string]int) + for u, s := range m { + n[s] = u + } + return n +} + +// Convert a MsgHdr to a string, with dig-like headers: +// +//;; opcode: QUERY, status: NOERROR, id: 48404 +// +//;; flags: qr aa rd ra; +func (h *MsgHdr) String() string { + if h == nil { + return "<nil> MsgHdr" + } + + s := ";; opcode: " + OpcodeToString[h.Opcode] + s += ", status: " + RcodeToString[h.Rcode] + s += ", id: " + strconv.Itoa(int(h.Id)) + "\n" + + s += ";; flags:" + if h.Response { + s += " qr" + } + if h.Authoritative { + s += " aa" + } + if h.Truncated { + s += " tc" + } + if h.RecursionDesired { + s += " rd" + } + if h.RecursionAvailable { + s += " ra" + } + if h.Zero { // Hmm + s += " z" + } + if h.AuthenticatedData { + s += " ad" + } + if h.CheckingDisabled { + s += " cd" + } + + s += ";" + return s +} + +// Pack packs a Msg: it is converted to to wire format. +// If the dns.Compress is true the message will be in compressed wire format. +func (dns *Msg) Pack() (msg []byte, err error) { + return dns.PackBuffer(nil) +} + +// PackBuffer packs a Msg, using the given buffer buf. If buf is too small +// a new buffer is allocated. +func (dns *Msg) PackBuffer(buf []byte) (msg []byte, err error) { + var dh Header + var compression map[string]int + if dns.Compress { + compression = make(map[string]int) // Compression pointer mappings + } + + if dns.Rcode < 0 || dns.Rcode > 0xFFF { + return nil, ErrRcode + } + if dns.Rcode > 0xF { + // Regular RCODE field is 4 bits + opt := dns.IsEdns0() + if opt == nil { + return nil, ErrExtendedRcode + } + opt.SetExtendedRcode(uint8(dns.Rcode >> 4)) + dns.Rcode &= 0xF + } + + // Convert convenient Msg into wire-like Header. + dh.Id = dns.Id + dh.Bits = uint16(dns.Opcode)<<11 | uint16(dns.Rcode) + if dns.Response { + dh.Bits |= _QR + } + if dns.Authoritative { + dh.Bits |= _AA + } + if dns.Truncated { + dh.Bits |= _TC + } + if dns.RecursionDesired { + dh.Bits |= _RD + } + if dns.RecursionAvailable { + dh.Bits |= _RA + } + if dns.Zero { + dh.Bits |= _Z + } + if dns.AuthenticatedData { + dh.Bits |= _AD + } + if dns.CheckingDisabled { + dh.Bits |= _CD + } + + // Prepare variable sized arrays. + question := dns.Question + answer := dns.Answer + ns := dns.Ns + extra := dns.Extra + + dh.Qdcount = uint16(len(question)) + dh.Ancount = uint16(len(answer)) + dh.Nscount = uint16(len(ns)) + dh.Arcount = uint16(len(extra)) + + // We need the uncompressed length here, because we first pack it and then compress it. + msg = buf + compress := dns.Compress + dns.Compress = false + if packLen := dns.Len() + 1; len(msg) < packLen { + msg = make([]byte, packLen) + } + dns.Compress = compress + + // Pack it in: header and then the pieces. + off := 0 + off, err = packStructCompress(&dh, msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + for i := 0; i < len(question); i++ { + off, err = packStructCompress(&question[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(answer); i++ { + off, err = PackRR(answer[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(ns); i++ { + off, err = PackRR(ns[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(extra); i++ { + off, err = PackRR(extra[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + return msg[:off], nil +} + +// Unpack unpacks a binary message to a Msg structure. +func (dns *Msg) Unpack(msg []byte) (err error) { + // Header. + var dh Header + off := 0 + if off, err = UnpackStruct(&dh, msg, off); err != nil { + return err + } + dns.Id = dh.Id + dns.Response = (dh.Bits & _QR) != 0 + dns.Opcode = int(dh.Bits>>11) & 0xF + dns.Authoritative = (dh.Bits & _AA) != 0 + dns.Truncated = (dh.Bits & _TC) != 0 + dns.RecursionDesired = (dh.Bits & _RD) != 0 + dns.RecursionAvailable = (dh.Bits & _RA) != 0 + dns.Zero = (dh.Bits & _Z) != 0 + dns.AuthenticatedData = (dh.Bits & _AD) != 0 + dns.CheckingDisabled = (dh.Bits & _CD) != 0 + dns.Rcode = int(dh.Bits & 0xF) + + // Don't pre-alloc these arrays, the incoming lengths are from the network. + dns.Question = make([]Question, 0, 1) + dns.Answer = make([]RR, 0, 10) + dns.Ns = make([]RR, 0, 10) + dns.Extra = make([]RR, 0, 10) + + var q Question + for i := 0; i < int(dh.Qdcount); i++ { + off1 := off + off, err = UnpackStruct(&q, msg, off) + if err != nil { + return err + } + if off1 == off { // Offset does not increase anymore, dh.Qdcount is a lie! + dh.Qdcount = uint16(i) + break + } + + dns.Question = append(dns.Question, q) + + } + // If we see a TC bit being set we return here, without + // an error, because technically it isn't an error. So return + // without parsing the potentially corrupt packet and hitting an error. + // TODO(miek): this isn't the best strategy! + // Better stragey would be: set boolean indicating truncated message, go forth and parse + // until we hit an error, return the message without the latest parsed rr if this boolean + // is true. + if dns.Truncated { + dns.Answer = nil + dns.Ns = nil + dns.Extra = nil + return nil + } + + var r RR + for i := 0; i < int(dh.Ancount); i++ { + off1 := off + r, off, err = UnpackRR(msg, off) + if err != nil { + return err + } + if off1 == off { // Offset does not increase anymore, dh.Ancount is a lie! + dh.Ancount = uint16(i) + break + } + dns.Answer = append(dns.Answer, r) + } + for i := 0; i < int(dh.Nscount); i++ { + off1 := off + r, off, err = UnpackRR(msg, off) + if err != nil { + return err + } + if off1 == off { // Offset does not increase anymore, dh.Nscount is a lie! + dh.Nscount = uint16(i) + break + } + dns.Ns = append(dns.Ns, r) + } + for i := 0; i < int(dh.Arcount); i++ { + off1 := off + r, off, err = UnpackRR(msg, off) + if err != nil { + return err + } + if off1 == off { // Offset does not increase anymore, dh.Arcount is a lie! + dh.Arcount = uint16(i) + break + } + dns.Extra = append(dns.Extra, r) + } + if off != len(msg) { + // TODO(miek) make this an error? + // use PackOpt to let people tell how detailed the error reporting should be? + // println("dns: extra bytes in dns packet", off, "<", len(msg)) + } + return nil +} + +// Convert a complete message to a string with dig-like output. +func (dns *Msg) String() string { + if dns == nil { + return "<nil> MsgHdr" + } + s := dns.MsgHdr.String() + " " + s += "QUERY: " + strconv.Itoa(len(dns.Question)) + ", " + s += "ANSWER: " + strconv.Itoa(len(dns.Answer)) + ", " + s += "AUTHORITY: " + strconv.Itoa(len(dns.Ns)) + ", " + s += "ADDITIONAL: " + strconv.Itoa(len(dns.Extra)) + "\n" + if len(dns.Question) > 0 { + s += "\n;; QUESTION SECTION:\n" + for i := 0; i < len(dns.Question); i++ { + s += dns.Question[i].String() + "\n" + } + } + if len(dns.Answer) > 0 { + s += "\n;; ANSWER SECTION:\n" + for i := 0; i < len(dns.Answer); i++ { + if dns.Answer[i] != nil { + s += dns.Answer[i].String() + "\n" + } + } + } + if len(dns.Ns) > 0 { + s += "\n;; AUTHORITY SECTION:\n" + for i := 0; i < len(dns.Ns); i++ { + if dns.Ns[i] != nil { + s += dns.Ns[i].String() + "\n" + } + } + } + if len(dns.Extra) > 0 { + s += "\n;; ADDITIONAL SECTION:\n" + for i := 0; i < len(dns.Extra); i++ { + if dns.Extra[i] != nil { + s += dns.Extra[i].String() + "\n" + } + } + } + return s +} + +// Len returns the message length when in (un)compressed wire format. +// If dns.Compress is true compression it is taken into account. Len() +// is provided to be a faster way to get the size of the resulting packet, +// than packing it, measuring the size and discarding the buffer. +func (dns *Msg) Len() int { + // We always return one more than needed. + l := 12 // Message header is always 12 bytes + var compression map[string]int + if dns.Compress { + compression = make(map[string]int) + } + for i := 0; i < len(dns.Question); i++ { + l += dns.Question[i].len() + if dns.Compress { + compressionLenHelper(compression, dns.Question[i].Name) + } + } + for i := 0; i < len(dns.Answer); i++ { + l += dns.Answer[i].len() + if dns.Compress { + k, ok := compressionLenSearch(compression, dns.Answer[i].Header().Name) + if ok { + l += 1 - k + } + compressionLenHelper(compression, dns.Answer[i].Header().Name) + k, ok = compressionLenSearchType(compression, dns.Answer[i]) + if ok { + l += 1 - k + } + compressionLenHelperType(compression, dns.Answer[i]) + } + } + for i := 0; i < len(dns.Ns); i++ { + l += dns.Ns[i].len() + if dns.Compress { + k, ok := compressionLenSearch(compression, dns.Ns[i].Header().Name) + if ok { + l += 1 - k + } + compressionLenHelper(compression, dns.Ns[i].Header().Name) + k, ok = compressionLenSearchType(compression, dns.Ns[i]) + if ok { + l += 1 - k + } + compressionLenHelperType(compression, dns.Ns[i]) + } + } + for i := 0; i < len(dns.Extra); i++ { + l += dns.Extra[i].len() + if dns.Compress { + k, ok := compressionLenSearch(compression, dns.Extra[i].Header().Name) + if ok { + l += 1 - k + } + compressionLenHelper(compression, dns.Extra[i].Header().Name) + k, ok = compressionLenSearchType(compression, dns.Extra[i]) + if ok { + l += 1 - k + } + compressionLenHelperType(compression, dns.Extra[i]) + } + } + return l +} + +// Put the parts of the name in the compression map. +func compressionLenHelper(c map[string]int, s string) { + pref := "" + lbs := Split(s) + for j := len(lbs) - 1; j >= 0; j-- { + pref = s[lbs[j]:] + if _, ok := c[pref]; !ok { + c[pref] = len(pref) + } + } +} + +// Look for each part in the compression map and returns its length, +// keep on searching so we get the longest match. +func compressionLenSearch(c map[string]int, s string) (int, bool) { + off := 0 + end := false + if s == "" { // don't bork on bogus data + return 0, false + } + for { + if _, ok := c[s[off:]]; ok { + return len(s[off:]), true + } + if end { + break + } + off, end = NextLabel(s, off) + } + return 0, false +} + +// TODO(miek): should add all types, because the all can be *used* for compression. +func compressionLenHelperType(c map[string]int, r RR) { + switch x := r.(type) { + case *NS: + compressionLenHelper(c, x.Ns) + case *MX: + compressionLenHelper(c, x.Mx) + case *CNAME: + compressionLenHelper(c, x.Target) + case *PTR: + compressionLenHelper(c, x.Ptr) + case *SOA: + compressionLenHelper(c, x.Ns) + compressionLenHelper(c, x.Mbox) + case *MB: + compressionLenHelper(c, x.Mb) + case *MG: + compressionLenHelper(c, x.Mg) + case *MR: + compressionLenHelper(c, x.Mr) + case *MF: + compressionLenHelper(c, x.Mf) + case *MD: + compressionLenHelper(c, x.Md) + case *RT: + compressionLenHelper(c, x.Host) + case *MINFO: + compressionLenHelper(c, x.Rmail) + compressionLenHelper(c, x.Email) + case *AFSDB: + compressionLenHelper(c, x.Hostname) + } +} + +// Only search on compressing these types. +func compressionLenSearchType(c map[string]int, r RR) (int, bool) { + switch x := r.(type) { + case *NS: + return compressionLenSearch(c, x.Ns) + case *MX: + return compressionLenSearch(c, x.Mx) + case *CNAME: + return compressionLenSearch(c, x.Target) + case *PTR: + return compressionLenSearch(c, x.Ptr) + case *SOA: + k, ok := compressionLenSearch(c, x.Ns) + k1, ok1 := compressionLenSearch(c, x.Mbox) + if !ok && !ok1 { + return 0, false + } + return k + k1, true + case *MB: + return compressionLenSearch(c, x.Mb) + case *MG: + return compressionLenSearch(c, x.Mg) + case *MR: + return compressionLenSearch(c, x.Mr) + case *MF: + return compressionLenSearch(c, x.Mf) + case *MD: + return compressionLenSearch(c, x.Md) + case *RT: + return compressionLenSearch(c, x.Host) + case *MINFO: + k, ok := compressionLenSearch(c, x.Rmail) + k1, ok1 := compressionLenSearch(c, x.Email) + if !ok && !ok1 { + return 0, false + } + return k + k1, true + case *AFSDB: + return compressionLenSearch(c, x.Hostname) + } + return 0, false +} + +// id returns a 16 bits random number to be used as a +// message id. The random provided should be good enough. +func id() uint16 { + return uint16(rand.Int()) ^ uint16(time.Now().Nanosecond()) +} + +// Copy returns a new RR which is a deep-copy of r. +func Copy(r RR) RR { + r1 := r.copy() + return r1 +} + +// Copy returns a new *Msg which is a deep-copy of dns. +func (dns *Msg) Copy() *Msg { + return dns.CopyTo(new(Msg)) +} + +// CopyTo copies the contents to the provided message using a deep-copy and returns the copy. +func (dns *Msg) CopyTo(r1 *Msg) *Msg { + r1.MsgHdr = dns.MsgHdr + r1.Compress = dns.Compress + + if len(dns.Question) > 0 { + r1.Question = make([]Question, len(dns.Question)) + copy(r1.Question, dns.Question) // TODO(miek): Question is an immutable value, ok to do a shallow-copy + } + + rrArr := make([]RR, len(dns.Answer)+len(dns.Ns)+len(dns.Extra)) + var rri int + + if len(dns.Answer) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Answer); i++ { + rrArr[rri] = dns.Answer[i].copy() + rri++ + } + r1.Answer = rrArr[rrbegin:rri:rri] + } + + if len(dns.Ns) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Ns); i++ { + rrArr[rri] = dns.Ns[i].copy() + rri++ + } + r1.Ns = rrArr[rrbegin:rri:rri] + } + + if len(dns.Extra) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Extra); i++ { + rrArr[rri] = dns.Extra[i].copy() + rri++ + } + r1.Extra = rrArr[rrbegin:rri:rri] + } + + return r1 +} diff --git a/vendor/github.com/miekg/dns/nsecx.go b/vendor/github.com/miekg/dns/nsecx.go new file mode 100644 index 0000000..d2392c6 --- /dev/null +++ b/vendor/github.com/miekg/dns/nsecx.go @@ -0,0 +1,112 @@ +package dns + +import ( + "crypto/sha1" + "hash" + "io" + "strings" +) + +type saltWireFmt struct { + Salt string `dns:"size-hex"` +} + +// HashName hashes a string (label) according to RFC 5155. It returns the hashed string in +// uppercase. +func HashName(label string, ha uint8, iter uint16, salt string) string { + saltwire := new(saltWireFmt) + saltwire.Salt = salt + wire := make([]byte, DefaultMsgSize) + n, err := PackStruct(saltwire, wire, 0) + if err != nil { + return "" + } + wire = wire[:n] + name := make([]byte, 255) + off, err := PackDomainName(strings.ToLower(label), name, 0, nil, false) + if err != nil { + return "" + } + name = name[:off] + var s hash.Hash + switch ha { + case SHA1: + s = sha1.New() + default: + return "" + } + + // k = 0 + name = append(name, wire...) + io.WriteString(s, string(name)) + nsec3 := s.Sum(nil) + // k > 0 + for k := uint16(0); k < iter; k++ { + s.Reset() + nsec3 = append(nsec3, wire...) + io.WriteString(s, string(nsec3)) + nsec3 = s.Sum(nil) + } + return toBase32(nsec3) +} + +// Denialer is an interface that should be implemented by types that are used to denial +// answers in DNSSEC. +type Denialer interface { + // Cover will check if the (unhashed) name is being covered by this NSEC or NSEC3. + Cover(name string) bool + // Match will check if the ownername matches the (unhashed) name for this NSEC3 or NSEC3. + Match(name string) bool +} + +// Cover implements the Denialer interface. +func (rr *NSEC) Cover(name string) bool { + return true +} + +// Match implements the Denialer interface. +func (rr *NSEC) Match(name string) bool { + return true +} + +// Cover implements the Denialer interface. +func (rr *NSEC3) Cover(name string) bool { + // FIXME(miek): check if the zones match + // FIXME(miek): check if we're not dealing with parent nsec3 + hname := HashName(name, rr.Hash, rr.Iterations, rr.Salt) + labels := Split(rr.Hdr.Name) + if len(labels) < 2 { + return false + } + hash := strings.ToUpper(rr.Hdr.Name[labels[0] : labels[1]-1]) // -1 to remove the dot + if hash == rr.NextDomain { + return false // empty interval + } + if hash > rr.NextDomain { // last name, points to apex + // hname > hash + // hname > rr.NextDomain + // TODO(miek) + } + if hname <= hash { + return false + } + if hname >= rr.NextDomain { + return false + } + return true +} + +// Match implements the Denialer interface. +func (rr *NSEC3) Match(name string) bool { + // FIXME(miek): Check if we are in the same zone + hname := HashName(name, rr.Hash, rr.Iterations, rr.Salt) + labels := Split(rr.Hdr.Name) + if len(labels) < 2 { + return false + } + hash := strings.ToUpper(rr.Hdr.Name[labels[0] : labels[1]-1]) // -1 to remove the . + if hash == hname { + return true + } + return false +} diff --git a/vendor/github.com/miekg/dns/privaterr.go b/vendor/github.com/miekg/dns/privaterr.go new file mode 100644 index 0000000..7290791 --- /dev/null +++ b/vendor/github.com/miekg/dns/privaterr.go @@ -0,0 +1,117 @@ +package dns + +import ( + "fmt" + "strings" +) + +// PrivateRdata is an interface used for implementing "Private Use" RR types, see +// RFC 6895. This allows one to experiment with new RR types, without requesting an +// official type code. Also see dns.PrivateHandle and dns.PrivateHandleRemove. +type PrivateRdata interface { + // String returns the text presentaton of the Rdata of the Private RR. + String() string + // Parse parses the Rdata of the private RR. + Parse([]string) error + // Pack is used when packing a private RR into a buffer. + Pack([]byte) (int, error) + // Unpack is used when unpacking a private RR from a buffer. + // TODO(miek): diff. signature than Pack, see edns0.go for instance. + Unpack([]byte) (int, error) + // Copy copies the Rdata. + Copy(PrivateRdata) error + // Len returns the length in octets of the Rdata. + Len() int +} + +// PrivateRR represents an RR that uses a PrivateRdata user-defined type. +// It mocks normal RRs and implements dns.RR interface. +type PrivateRR struct { + Hdr RR_Header + Data PrivateRdata +} + +func mkPrivateRR(rrtype uint16) *PrivateRR { + // Panics if RR is not an instance of PrivateRR. + rrfunc, ok := typeToRR[rrtype] + if !ok { + panic(fmt.Sprintf("dns: invalid operation with Private RR type %d", rrtype)) + } + + anyrr := rrfunc() + switch rr := anyrr.(type) { + case *PrivateRR: + return rr + } + panic(fmt.Sprintf("dns: RR is not a PrivateRR, typeToRR[%d] generator returned %T", rrtype, anyrr)) +} + +// Header return the RR header of r. +func (r *PrivateRR) Header() *RR_Header { return &r.Hdr } + +func (r *PrivateRR) String() string { return r.Hdr.String() + r.Data.String() } + +// Private len and copy parts to satisfy RR interface. +func (r *PrivateRR) len() int { return r.Hdr.len() + r.Data.Len() } +func (r *PrivateRR) copy() RR { + // make new RR like this: + rr := mkPrivateRR(r.Hdr.Rrtype) + newh := r.Hdr.copyHeader() + rr.Hdr = *newh + + err := r.Data.Copy(rr.Data) + if err != nil { + panic("dns: got value that could not be used to copy Private rdata") + } + return rr +} + +// PrivateHandle registers a private resource record type. It requires +// string and numeric representation of private RR type and generator function as argument. +func PrivateHandle(rtypestr string, rtype uint16, generator func() PrivateRdata) { + rtypestr = strings.ToUpper(rtypestr) + + typeToRR[rtype] = func() RR { return &PrivateRR{RR_Header{}, generator()} } + TypeToString[rtype] = rtypestr + StringToType[rtypestr] = rtype + + setPrivateRR := func(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := mkPrivateRR(h.Rrtype) + rr.Hdr = h + + var l lex + text := make([]string, 0, 2) // could be 0..N elements, median is probably 1 + FETCH: + for { + // TODO(miek): we could also be returning _QUOTE, this might or might not + // be an issue (basically parsing TXT becomes hard) + switch l = <-c; l.value { + case zNewline, zEOF: + break FETCH + case zString: + text = append(text, l.token) + } + } + + err := rr.Data.Parse(text) + if err != nil { + return nil, &ParseError{f, err.Error(), l}, "" + } + + return rr, nil, "" + } + + typeToparserFunc[rtype] = parserFunc{setPrivateRR, true} +} + +// PrivateHandleRemove removes defenitions required to support private RR type. +func PrivateHandleRemove(rtype uint16) { + rtypestr, ok := TypeToString[rtype] + if ok { + delete(typeToRR, rtype) + delete(TypeToString, rtype) + delete(typeToparserFunc, rtype) + delete(StringToType, rtypestr) + } + return +} diff --git a/vendor/github.com/miekg/dns/rawmsg.go b/vendor/github.com/miekg/dns/rawmsg.go new file mode 100644 index 0000000..f138b77 --- /dev/null +++ b/vendor/github.com/miekg/dns/rawmsg.go @@ -0,0 +1,95 @@ +package dns + +// These raw* functions do not use reflection, they directly set the values +// in the buffer. There are faster than their reflection counterparts. + +// RawSetId sets the message id in buf. +func rawSetId(msg []byte, i uint16) bool { + if len(msg) < 2 { + return false + } + msg[0], msg[1] = packUint16(i) + return true +} + +// rawSetQuestionLen sets the length of the question section. +func rawSetQuestionLen(msg []byte, i uint16) bool { + if len(msg) < 6 { + return false + } + msg[4], msg[5] = packUint16(i) + return true +} + +// rawSetAnswerLen sets the lenght of the answer section. +func rawSetAnswerLen(msg []byte, i uint16) bool { + if len(msg) < 8 { + return false + } + msg[6], msg[7] = packUint16(i) + return true +} + +// rawSetsNsLen sets the lenght of the authority section. +func rawSetNsLen(msg []byte, i uint16) bool { + if len(msg) < 10 { + return false + } + msg[8], msg[9] = packUint16(i) + return true +} + +// rawSetExtraLen sets the lenght of the additional section. +func rawSetExtraLen(msg []byte, i uint16) bool { + if len(msg) < 12 { + return false + } + msg[10], msg[11] = packUint16(i) + return true +} + +// rawSetRdlength sets the rdlength in the header of +// the RR. The offset 'off' must be positioned at the +// start of the header of the RR, 'end' must be the +// end of the RR. +func rawSetRdlength(msg []byte, off, end int) bool { + l := len(msg) +Loop: + for { + if off+1 > l { + return false + } + c := int(msg[off]) + off++ + switch c & 0xC0 { + case 0x00: + if c == 0x00 { + // End of the domainname + break Loop + } + if off+c > l { + return false + } + off += c + + case 0xC0: + // pointer, next byte included, ends domainname + off++ + break Loop + } + } + // The domainname has been seen, we at the start of the fixed part in the header. + // Type is 2 bytes, class is 2 bytes, ttl 4 and then 2 bytes for the length. + off += 2 + 2 + 4 + if off+2 > l { + return false + } + //off+1 is the end of the header, 'end' is the end of the rr + //so 'end' - 'off+2' is the length of the rdata + rdatalen := end - (off + 2) + if rdatalen > 0xFFFF { + return false + } + msg[off], msg[off+1] = packUint16(uint16(rdatalen)) + return true +} diff --git a/vendor/github.com/miekg/dns/sanitize.go b/vendor/github.com/miekg/dns/sanitize.go new file mode 100644 index 0000000..b489f3f --- /dev/null +++ b/vendor/github.com/miekg/dns/sanitize.go @@ -0,0 +1,84 @@ +package dns + +// Dedup removes identical RRs from rrs. It preserves the original ordering. +// The lowest TTL of any duplicates is used in the remaining one. Dedup modifies +// rrs. +// m is used to store the RRs temporay. If it is nil a new map will be allocated. +func Dedup(rrs []RR, m map[string]RR) []RR { + if m == nil { + m = make(map[string]RR) + } + // Save the keys, so we don't have to call normalizedString twice. + keys := make([]*string, 0, len(rrs)) + + for _, r := range rrs { + key := normalizedString(r) + keys = append(keys, &key) + if _, ok := m[key]; ok { + // Shortest TTL wins. + if m[key].Header().Ttl > r.Header().Ttl { + m[key].Header().Ttl = r.Header().Ttl + } + continue + } + + m[key] = r + } + // If the length of the result map equals the amount of RRs we got, + // it means they were all different. We can then just return the original rrset. + if len(m) == len(rrs) { + return rrs + } + + j := 0 + for i, r := range rrs { + // If keys[i] lives in the map, we should copy and remove it. + if _, ok := m[*keys[i]]; ok { + delete(m, *keys[i]) + rrs[j] = r + j++ + } + + if len(m) == 0 { + break + } + } + + return rrs[:j] +} + +// normalizedString returns a normalized string from r. The TTL +// is removed and the domain name is lowercased. We go from this: +// DomainName<TAB>TTL<TAB>CLASS<TAB>TYPE<TAB>RDATA to: +// lowercasename<TAB>CLASS<TAB>TYPE... +func normalizedString(r RR) string { + // A string Go DNS makes has: domainname<TAB>TTL<TAB>... + b := []byte(r.String()) + + // find the first non-escaped tab, then another, so we capture where the TTL lives. + esc := false + ttlStart, ttlEnd := 0, 0 + for i := 0; i < len(b) && ttlEnd == 0; i++ { + switch { + case b[i] == '\\': + esc = !esc + case b[i] == '\t' && !esc: + if ttlStart == 0 { + ttlStart = i + continue + } + if ttlEnd == 0 { + ttlEnd = i + } + case b[i] >= 'A' && b[i] <= 'Z' && !esc: + b[i] += 32 + default: + esc = false + } + } + + // remove TTL. + copy(b[ttlStart:], b[ttlEnd:]) + cut := ttlEnd - ttlStart + return string(b[:len(b)-cut]) +} diff --git a/vendor/github.com/miekg/dns/scanner.go b/vendor/github.com/miekg/dns/scanner.go new file mode 100644 index 0000000..c29bc2f --- /dev/null +++ b/vendor/github.com/miekg/dns/scanner.go @@ -0,0 +1,43 @@ +package dns + +// Implement a simple scanner, return a byte stream from an io reader. + +import ( + "bufio" + "io" + "text/scanner" +) + +type scan struct { + src *bufio.Reader + position scanner.Position + eof bool // Have we just seen a eof +} + +func scanInit(r io.Reader) *scan { + s := new(scan) + s.src = bufio.NewReader(r) + s.position.Line = 1 + return s +} + +// tokenText returns the next byte from the input +func (s *scan) tokenText() (byte, error) { + c, err := s.src.ReadByte() + if err != nil { + return c, err + } + // delay the newline handling until the next token is delivered, + // fixes off-by-one errors when reporting a parse error. + if s.eof == true { + s.position.Line++ + s.position.Column = 0 + s.eof = false + } + if c == '\n' { + s.eof = true + return c, nil + } + s.position.Column++ + return c, nil +} diff --git a/vendor/github.com/miekg/dns/server.go b/vendor/github.com/miekg/dns/server.go new file mode 100644 index 0000000..48584f5 --- /dev/null +++ b/vendor/github.com/miekg/dns/server.go @@ -0,0 +1,717 @@ +// DNS server implementation. + +package dns + +import ( + "bytes" + "io" + "net" + "sync" + "time" +) + +// Maximum number of TCP queries before we close the socket. +const maxTCPQueries = 128 + +// Handler is implemented by any value that implements ServeDNS. +type Handler interface { + ServeDNS(w ResponseWriter, r *Msg) +} + +// A ResponseWriter interface is used by an DNS handler to +// construct an DNS response. +type ResponseWriter interface { + // LocalAddr returns the net.Addr of the server + LocalAddr() net.Addr + // RemoteAddr returns the net.Addr of the client that sent the current request. + RemoteAddr() net.Addr + // WriteMsg writes a reply back to the client. + WriteMsg(*Msg) error + // Write writes a raw buffer back to the client. + Write([]byte) (int, error) + // Close closes the connection. + Close() error + // TsigStatus returns the status of the Tsig. + TsigStatus() error + // TsigTimersOnly sets the tsig timers only boolean. + TsigTimersOnly(bool) + // Hijack lets the caller take over the connection. + // After a call to Hijack(), the DNS package will not do anything with the connection. + Hijack() +} + +type response struct { + hijacked bool // connection has been hijacked by handler + tsigStatus error + tsigTimersOnly bool + tsigRequestMAC string + tsigSecret map[string]string // the tsig secrets + udp *net.UDPConn // i/o connection if UDP was used + tcp *net.TCPConn // i/o connection if TCP was used + udpSession *SessionUDP // oob data to get egress interface right + remoteAddr net.Addr // address of the client + writer Writer // writer to output the raw DNS bits +} + +// ServeMux is an DNS request multiplexer. It matches the +// zone name of each incoming request against a list of +// registered patterns add calls the handler for the pattern +// that most closely matches the zone name. ServeMux is DNSSEC aware, meaning +// that queries for the DS record are redirected to the parent zone (if that +// is also registered), otherwise the child gets the query. +// ServeMux is also safe for concurrent access from multiple goroutines. +type ServeMux struct { + z map[string]Handler + m *sync.RWMutex +} + +// NewServeMux allocates and returns a new ServeMux. +func NewServeMux() *ServeMux { return &ServeMux{z: make(map[string]Handler), m: new(sync.RWMutex)} } + +// DefaultServeMux is the default ServeMux used by Serve. +var DefaultServeMux = NewServeMux() + +// The HandlerFunc type is an adapter to allow the use of +// ordinary functions as DNS handlers. If f is a function +// with the appropriate signature, HandlerFunc(f) is a +// Handler object that calls f. +type HandlerFunc func(ResponseWriter, *Msg) + +// ServeDNS calls f(w, r). +func (f HandlerFunc) ServeDNS(w ResponseWriter, r *Msg) { + f(w, r) +} + +// HandleFailed returns a HandlerFunc that returns SERVFAIL for every request it gets. +func HandleFailed(w ResponseWriter, r *Msg) { + m := new(Msg) + m.SetRcode(r, RcodeServerFailure) + // does not matter if this write fails + w.WriteMsg(m) +} + +func failedHandler() Handler { return HandlerFunc(HandleFailed) } + +// ListenAndServe Starts a server on addresss and network speficied. Invoke handler +// for incoming queries. +func ListenAndServe(addr string, network string, handler Handler) error { + server := &Server{Addr: addr, Net: network, Handler: handler} + return server.ListenAndServe() +} + +// ActivateAndServe activates a server with a listener from systemd, +// l and p should not both be non-nil. +// If both l and p are not nil only p will be used. +// Invoke handler for incoming queries. +func ActivateAndServe(l net.Listener, p net.PacketConn, handler Handler) error { + server := &Server{Listener: l, PacketConn: p, Handler: handler} + return server.ActivateAndServe() +} + +func (mux *ServeMux) match(q string, t uint16) Handler { + mux.m.RLock() + defer mux.m.RUnlock() + var handler Handler + b := make([]byte, len(q)) // worst case, one label of length q + off := 0 + end := false + for { + l := len(q[off:]) + for i := 0; i < l; i++ { + b[i] = q[off+i] + if b[i] >= 'A' && b[i] <= 'Z' { + b[i] |= ('a' - 'A') + } + } + if h, ok := mux.z[string(b[:l])]; ok { // 'causes garbage, might want to change the map key + if t != TypeDS { + return h + } + // Continue for DS to see if we have a parent too, if so delegeate to the parent + handler = h + } + off, end = NextLabel(q, off) + if end { + break + } + } + // Wildcard match, if we have found nothing try the root zone as a last resort. + if h, ok := mux.z["."]; ok { + return h + } + return handler +} + +// Handle adds a handler to the ServeMux for pattern. +func (mux *ServeMux) Handle(pattern string, handler Handler) { + if pattern == "" { + panic("dns: invalid pattern " + pattern) + } + mux.m.Lock() + mux.z[Fqdn(pattern)] = handler + mux.m.Unlock() +} + +// HandleFunc adds a handler function to the ServeMux for pattern. +func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Msg)) { + mux.Handle(pattern, HandlerFunc(handler)) +} + +// HandleRemove deregistrars the handler specific for pattern from the ServeMux. +func (mux *ServeMux) HandleRemove(pattern string) { + if pattern == "" { + panic("dns: invalid pattern " + pattern) + } + mux.m.Lock() + delete(mux.z, Fqdn(pattern)) + mux.m.Unlock() +} + +// ServeDNS dispatches the request to the handler whose +// pattern most closely matches the request message. If DefaultServeMux +// is used the correct thing for DS queries is done: a possible parent +// is sought. +// If no handler is found a standard SERVFAIL message is returned +// If the request message does not have exactly one question in the +// question section a SERVFAIL is returned, unlesss Unsafe is true. +func (mux *ServeMux) ServeDNS(w ResponseWriter, request *Msg) { + var h Handler + if len(request.Question) < 1 { // allow more than one question + h = failedHandler() + } else { + if h = mux.match(request.Question[0].Name, request.Question[0].Qtype); h == nil { + h = failedHandler() + } + } + h.ServeDNS(w, request) +} + +// Handle registers the handler with the given pattern +// in the DefaultServeMux. The documentation for +// ServeMux explains how patterns are matched. +func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) } + +// HandleRemove deregisters the handle with the given pattern +// in the DefaultServeMux. +func HandleRemove(pattern string) { DefaultServeMux.HandleRemove(pattern) } + +// HandleFunc registers the handler function with the given pattern +// in the DefaultServeMux. +func HandleFunc(pattern string, handler func(ResponseWriter, *Msg)) { + DefaultServeMux.HandleFunc(pattern, handler) +} + +// Writer writes raw DNS messages; each call to Write should send an entire message. +type Writer interface { + io.Writer +} + +// Reader reads raw DNS messages; each call to ReadTCP or ReadUDP should return an entire message. +type Reader interface { + // ReadTCP reads a raw message from a TCP connection. Implementations may alter + // connection properties, for example the read-deadline. + ReadTCP(conn *net.TCPConn, timeout time.Duration) ([]byte, error) + // ReadUDP reads a raw message from a UDP connection. Implementations may alter + // connection properties, for example the read-deadline. + ReadUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) +} + +// defaultReader is an adapter for the Server struct that implements the Reader interface +// using the readTCP and readUDP func of the embedded Server. +type defaultReader struct { + *Server +} + +func (dr *defaultReader) ReadTCP(conn *net.TCPConn, timeout time.Duration) ([]byte, error) { + return dr.readTCP(conn, timeout) +} + +func (dr *defaultReader) ReadUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) { + return dr.readUDP(conn, timeout) +} + +// DecorateReader is a decorator hook for extending or supplanting the functionality of a Reader. +// Implementations should never return a nil Reader. +type DecorateReader func(Reader) Reader + +// DecorateWriter is a decorator hook for extending or supplanting the functionality of a Writer. +// Implementations should never return a nil Writer. +type DecorateWriter func(Writer) Writer + +// A Server defines parameters for running an DNS server. +type Server struct { + // Address to listen on, ":dns" if empty. + Addr string + // if "tcp" it will invoke a TCP listener, otherwise an UDP one. + Net string + // TCP Listener to use, this is to aid in systemd's socket activation. + Listener net.Listener + // UDP "Listener" to use, this is to aid in systemd's socket activation. + PacketConn net.PacketConn + // Handler to invoke, dns.DefaultServeMux if nil. + Handler Handler + // Default buffer size to use to read incoming UDP messages. If not set + // it defaults to MinMsgSize (512 B). + UDPSize int + // The net.Conn.SetReadTimeout value for new connections, defaults to 2 * time.Second. + ReadTimeout time.Duration + // The net.Conn.SetWriteTimeout value for new connections, defaults to 2 * time.Second. + WriteTimeout time.Duration + // TCP idle timeout for multiple queries, if nil, defaults to 8 * time.Second (RFC 5966). + IdleTimeout func() time.Duration + // Secret(s) for Tsig map[<zonename>]<base64 secret>. + TsigSecret map[string]string + // Unsafe instructs the server to disregard any sanity checks and directly hand the message to + // the handler. It will specfically not check if the query has the QR bit not set. + Unsafe bool + // If NotifyStartedFunc is set it is called once the server has started listening. + NotifyStartedFunc func() + // DecorateReader is optional, allows customization of the process that reads raw DNS messages. + DecorateReader DecorateReader + // DecorateWriter is optional, allows customization of the process that writes raw DNS messages. + DecorateWriter DecorateWriter + + // For graceful shutdown. + stopUDP chan bool + stopTCP chan bool + wgUDP sync.WaitGroup + wgTCP sync.WaitGroup + + // make start/shutdown not racy + lock sync.Mutex + started bool +} + +// ListenAndServe starts a nameserver on the configured address in *Server. +func (srv *Server) ListenAndServe() error { + srv.lock.Lock() + // We can't use defer() becasue serveTCP/serveUDP don't return. + if srv.started { + srv.lock.Unlock() + return &Error{err: "server already started"} + } + srv.stopUDP, srv.stopTCP = make(chan bool), make(chan bool) + srv.started = true + addr := srv.Addr + if addr == "" { + addr = ":domain" + } + if srv.UDPSize == 0 { + srv.UDPSize = MinMsgSize + } + switch srv.Net { + case "tcp", "tcp4", "tcp6": + a, e := net.ResolveTCPAddr(srv.Net, addr) + if e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + l, e := net.ListenTCP(srv.Net, a) + if e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + srv.Listener = l + srv.lock.Unlock() + return srv.serveTCP(l) + case "udp", "udp4", "udp6": + a, e := net.ResolveUDPAddr(srv.Net, addr) + if e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + l, e := net.ListenUDP(srv.Net, a) + if e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + if e := setUDPSocketOptions(l); e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + srv.PacketConn = l + srv.lock.Unlock() + return srv.serveUDP(l) + } + srv.lock.Unlock() + srv.started = false + return &Error{err: "bad network"} +} + +// ActivateAndServe starts a nameserver with the PacketConn or Listener +// configured in *Server. Its main use is to start a server from systemd. +func (srv *Server) ActivateAndServe() error { + srv.lock.Lock() + if srv.started { + srv.lock.Unlock() + return &Error{err: "server already started"} + } + srv.stopUDP, srv.stopTCP = make(chan bool), make(chan bool) + srv.started = true + pConn := srv.PacketConn + l := srv.Listener + if pConn != nil { + if srv.UDPSize == 0 { + srv.UDPSize = MinMsgSize + } + if t, ok := pConn.(*net.UDPConn); ok { + if e := setUDPSocketOptions(t); e != nil { + srv.lock.Unlock() + srv.started = false + return e + } + srv.lock.Unlock() + return srv.serveUDP(t) + } + } + if l != nil { + if t, ok := l.(*net.TCPListener); ok { + srv.lock.Unlock() + return srv.serveTCP(t) + } + } + srv.lock.Unlock() + srv.started = false + return &Error{err: "bad listeners"} +} + +// Shutdown gracefully shuts down a server. After a call to Shutdown, ListenAndServe and +// ActivateAndServe will return. All in progress queries are completed before the server +// is taken down. If the Shutdown is taking longer than the reading timeout an error +// is returned. +func (srv *Server) Shutdown() error { + srv.lock.Lock() + if !srv.started { + srv.lock.Unlock() + return &Error{err: "server not started"} + } + srv.started = false + net, addr := srv.Net, srv.Addr + switch { + case srv.Listener != nil: + a := srv.Listener.Addr() + net, addr = a.Network(), a.String() + case srv.PacketConn != nil: + a := srv.PacketConn.LocalAddr() + net, addr = a.Network(), a.String() + } + srv.lock.Unlock() + + fin := make(chan bool) + switch net { + case "tcp", "tcp4", "tcp6": + go func() { + srv.stopTCP <- true + srv.wgTCP.Wait() + fin <- true + }() + + case "udp", "udp4", "udp6": + go func() { + srv.stopUDP <- true + srv.wgUDP.Wait() + fin <- true + }() + } + + c := &Client{Net: net} + go c.Exchange(new(Msg), addr) // extra query to help ReadXXX loop to pass + + select { + case <-time.After(srv.getReadTimeout()): + return &Error{err: "server shutdown is pending"} + case <-fin: + return nil + } +} + +// getReadTimeout is a helper func to use system timeout if server did not intend to change it. +func (srv *Server) getReadTimeout() time.Duration { + rtimeout := dnsTimeout + if srv.ReadTimeout != 0 { + rtimeout = srv.ReadTimeout + } + return rtimeout +} + +// serveTCP starts a TCP listener for the server. +// Each request is handled in a separate goroutine. +func (srv *Server) serveTCP(l *net.TCPListener) error { + defer l.Close() + + if srv.NotifyStartedFunc != nil { + srv.NotifyStartedFunc() + } + + reader := Reader(&defaultReader{srv}) + if srv.DecorateReader != nil { + reader = srv.DecorateReader(reader) + } + + handler := srv.Handler + if handler == nil { + handler = DefaultServeMux + } + rtimeout := srv.getReadTimeout() + // deadline is not used here + for { + rw, e := l.AcceptTCP() + if e != nil { + continue + } + m, e := reader.ReadTCP(rw, rtimeout) + select { + case <-srv.stopTCP: + return nil + default: + } + if e != nil { + continue + } + srv.wgTCP.Add(1) + go srv.serve(rw.RemoteAddr(), handler, m, nil, nil, rw) + } +} + +// serveUDP starts a UDP listener for the server. +// Each request is handled in a separate goroutine. +func (srv *Server) serveUDP(l *net.UDPConn) error { + defer l.Close() + + if srv.NotifyStartedFunc != nil { + srv.NotifyStartedFunc() + } + + reader := Reader(&defaultReader{srv}) + if srv.DecorateReader != nil { + reader = srv.DecorateReader(reader) + } + + handler := srv.Handler + if handler == nil { + handler = DefaultServeMux + } + rtimeout := srv.getReadTimeout() + // deadline is not used here + for { + m, s, e := reader.ReadUDP(l, rtimeout) + select { + case <-srv.stopUDP: + return nil + default: + } + if e != nil { + continue + } + srv.wgUDP.Add(1) + go srv.serve(s.RemoteAddr(), handler, m, l, s, nil) + } +} + +// Serve a new connection. +func (srv *Server) serve(a net.Addr, h Handler, m []byte, u *net.UDPConn, s *SessionUDP, t *net.TCPConn) { + w := &response{tsigSecret: srv.TsigSecret, udp: u, tcp: t, remoteAddr: a, udpSession: s} + if srv.DecorateWriter != nil { + w.writer = srv.DecorateWriter(w) + } else { + w.writer = w + } + + q := 0 // counter for the amount of TCP queries we get + + defer func() { + if u != nil { + srv.wgUDP.Done() + } + if t != nil { + srv.wgTCP.Done() + } + }() + + reader := Reader(&defaultReader{srv}) + if srv.DecorateReader != nil { + reader = srv.DecorateReader(reader) + } +Redo: + req := new(Msg) + err := req.Unpack(m) + if err != nil { // Send a FormatError back + x := new(Msg) + x.SetRcodeFormatError(req) + w.WriteMsg(x) + goto Exit + } + if !srv.Unsafe && req.Response { + goto Exit + } + + w.tsigStatus = nil + if w.tsigSecret != nil { + if t := req.IsTsig(); t != nil { + secret := t.Hdr.Name + if _, ok := w.tsigSecret[secret]; !ok { + w.tsigStatus = ErrKeyAlg + } + w.tsigStatus = TsigVerify(m, w.tsigSecret[secret], "", false) + w.tsigTimersOnly = false + w.tsigRequestMAC = req.Extra[len(req.Extra)-1].(*TSIG).MAC + } + } + h.ServeDNS(w, req) // Writes back to the client + +Exit: + // TODO(miek): make this number configurable? + if q > maxTCPQueries { // close socket after this many queries + w.Close() + return + } + + if w.hijacked { + return // client calls Close() + } + if u != nil { // UDP, "close" and return + w.Close() + return + } + idleTimeout := tcpIdleTimeout + if srv.IdleTimeout != nil { + idleTimeout = srv.IdleTimeout() + } + m, e := reader.ReadTCP(w.tcp, idleTimeout) + if e == nil { + q++ + goto Redo + } + w.Close() + return +} + +func (srv *Server) readTCP(conn *net.TCPConn, timeout time.Duration) ([]byte, error) { + conn.SetReadDeadline(time.Now().Add(timeout)) + l := make([]byte, 2) + n, err := conn.Read(l) + if err != nil || n != 2 { + if err != nil { + return nil, err + } + return nil, ErrShortRead + } + length, _ := unpackUint16(l, 0) + if length == 0 { + return nil, ErrShortRead + } + m := make([]byte, int(length)) + n, err = conn.Read(m[:int(length)]) + if err != nil || n == 0 { + if err != nil { + return nil, err + } + return nil, ErrShortRead + } + i := n + for i < int(length) { + j, err := conn.Read(m[i:int(length)]) + if err != nil { + return nil, err + } + i += j + } + n = i + m = m[:n] + return m, nil +} + +func (srv *Server) readUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) { + conn.SetReadDeadline(time.Now().Add(timeout)) + m := make([]byte, srv.UDPSize) + n, s, e := ReadFromSessionUDP(conn, m) + if e != nil || n == 0 { + if e != nil { + return nil, nil, e + } + return nil, nil, ErrShortRead + } + m = m[:n] + return m, s, nil +} + +// WriteMsg implements the ResponseWriter.WriteMsg method. +func (w *response) WriteMsg(m *Msg) (err error) { + var data []byte + if w.tsigSecret != nil { // if no secrets, dont check for the tsig (which is a longer check) + if t := m.IsTsig(); t != nil { + data, w.tsigRequestMAC, err = TsigGenerate(m, w.tsigSecret[t.Hdr.Name], w.tsigRequestMAC, w.tsigTimersOnly) + if err != nil { + return err + } + _, err = w.writer.Write(data) + return err + } + } + data, err = m.Pack() + if err != nil { + return err + } + _, err = w.writer.Write(data) + return err +} + +// Write implements the ResponseWriter.Write method. +func (w *response) Write(m []byte) (int, error) { + switch { + case w.udp != nil: + n, err := WriteToSessionUDP(w.udp, m, w.udpSession) + return n, err + case w.tcp != nil: + lm := len(m) + if lm < 2 { + return 0, io.ErrShortBuffer + } + if lm > MaxMsgSize { + return 0, &Error{err: "message too large"} + } + l := make([]byte, 2, 2+lm) + l[0], l[1] = packUint16(uint16(lm)) + m = append(l, m...) + + n, err := io.Copy(w.tcp, bytes.NewReader(m)) + return int(n), err + } + panic("not reached") +} + +// LocalAddr implements the ResponseWriter.LocalAddr method. +func (w *response) LocalAddr() net.Addr { + if w.tcp != nil { + return w.tcp.LocalAddr() + } + return w.udp.LocalAddr() +} + +// RemoteAddr implements the ResponseWriter.RemoteAddr method. +func (w *response) RemoteAddr() net.Addr { return w.remoteAddr } + +// TsigStatus implements the ResponseWriter.TsigStatus method. +func (w *response) TsigStatus() error { return w.tsigStatus } + +// TsigTimersOnly implements the ResponseWriter.TsigTimersOnly method. +func (w *response) TsigTimersOnly(b bool) { w.tsigTimersOnly = b } + +// Hijack implements the ResponseWriter.Hijack method. +func (w *response) Hijack() { w.hijacked = true } + +// Close implements the ResponseWriter.Close method +func (w *response) Close() error { + // Can't close the udp conn, as that is actually the listener. + if w.tcp != nil { + e := w.tcp.Close() + w.tcp = nil + return e + } + return nil +} diff --git a/vendor/github.com/miekg/dns/sig0.go b/vendor/github.com/miekg/dns/sig0.go new file mode 100644 index 0000000..0fccddb --- /dev/null +++ b/vendor/github.com/miekg/dns/sig0.go @@ -0,0 +1,216 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "math/big" + "strings" + "time" +) + +// Sign signs a dns.Msg. It fills the signature with the appropriate data. +// The SIG record should have the SignerName, KeyTag, Algorithm, Inception +// and Expiration set. +func (rr *SIG) Sign(k crypto.Signer, m *Msg) ([]byte, error) { + if k == nil { + return nil, ErrPrivKey + } + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return nil, ErrKey + } + rr.Header().Rrtype = TypeSIG + rr.Header().Class = ClassANY + rr.Header().Ttl = 0 + rr.Header().Name = "." + rr.OrigTtl = 0 + rr.TypeCovered = 0 + rr.Labels = 0 + + buf := make([]byte, m.Len()+rr.len()) + mbuf, err := m.PackBuffer(buf) + if err != nil { + return nil, err + } + if &buf[0] != &mbuf[0] { + return nil, ErrBuf + } + off, err := PackRR(rr, buf, len(mbuf), nil, false) + if err != nil { + return nil, err + } + buf = buf[:off:cap(buf)] + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return nil, ErrAlg + } + + hasher := hash.New() + // Write SIG rdata + hasher.Write(buf[len(mbuf)+1+2+2+4+2:]) + // Write message + hasher.Write(buf[:len(mbuf)]) + + signature, err := sign(k, hasher.Sum(nil), hash, rr.Algorithm) + if err != nil { + return nil, err + } + + rr.Signature = toBase64(signature) + sig := string(signature) + + buf = append(buf, sig...) + if len(buf) > int(^uint16(0)) { + return nil, ErrBuf + } + // Adjust sig data length + rdoff := len(mbuf) + 1 + 2 + 2 + 4 + rdlen, _ := unpackUint16(buf, rdoff) + rdlen += uint16(len(sig)) + buf[rdoff], buf[rdoff+1] = packUint16(rdlen) + // Adjust additional count + adc, _ := unpackUint16(buf, 10) + adc++ + buf[10], buf[11] = packUint16(adc) + return buf, nil +} + +// Verify validates the message buf using the key k. +// It's assumed that buf is a valid message from which rr was unpacked. +func (rr *SIG) Verify(k *KEY, buf []byte) error { + if k == nil { + return ErrKey + } + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return ErrKey + } + + var hash crypto.Hash + switch rr.Algorithm { + case DSA, RSASHA1: + hash = crypto.SHA1 + case RSASHA256, ECDSAP256SHA256: + hash = crypto.SHA256 + case ECDSAP384SHA384: + hash = crypto.SHA384 + case RSASHA512: + hash = crypto.SHA512 + default: + return ErrAlg + } + hasher := hash.New() + + buflen := len(buf) + qdc, _ := unpackUint16(buf, 4) + anc, _ := unpackUint16(buf, 6) + auc, _ := unpackUint16(buf, 8) + adc, offset := unpackUint16(buf, 10) + var err error + for i := uint16(0); i < qdc && offset < buflen; i++ { + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip past Type and Class + offset += 2 + 2 + } + for i := uint16(1); i < anc+auc+adc && offset < buflen; i++ { + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip past Type, Class and TTL + offset += 2 + 2 + 4 + if offset+1 >= buflen { + continue + } + var rdlen uint16 + rdlen, offset = unpackUint16(buf, offset) + offset += int(rdlen) + } + if offset >= buflen { + return &Error{err: "overflowing unpacking signed message"} + } + + // offset should be just prior to SIG + bodyend := offset + // owner name SHOULD be root + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip Type, Class, TTL, RDLen + offset += 2 + 2 + 4 + 2 + sigstart := offset + // Skip Type Covered, Algorithm, Labels, Original TTL + offset += 2 + 1 + 1 + 4 + if offset+4+4 >= buflen { + return &Error{err: "overflow unpacking signed message"} + } + expire := uint32(buf[offset])<<24 | uint32(buf[offset+1])<<16 | uint32(buf[offset+2])<<8 | uint32(buf[offset+3]) + offset += 4 + incept := uint32(buf[offset])<<24 | uint32(buf[offset+1])<<16 | uint32(buf[offset+2])<<8 | uint32(buf[offset+3]) + offset += 4 + now := uint32(time.Now().Unix()) + if now < incept || now > expire { + return ErrTime + } + // Skip key tag + offset += 2 + var signername string + signername, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // If key has come from the DNS name compression might + // have mangled the case of the name + if strings.ToLower(signername) != strings.ToLower(k.Header().Name) { + return &Error{err: "signer name doesn't match key name"} + } + sigend := offset + hasher.Write(buf[sigstart:sigend]) + hasher.Write(buf[:10]) + hasher.Write([]byte{ + byte((adc - 1) << 8), + byte(adc - 1), + }) + hasher.Write(buf[12:bodyend]) + + hashed := hasher.Sum(nil) + sig := buf[sigend:] + switch k.Algorithm { + case DSA: + pk := k.publicKeyDSA() + sig = sig[1:] + r := big.NewInt(0) + r.SetBytes(sig[:len(sig)/2]) + s := big.NewInt(0) + s.SetBytes(sig[len(sig)/2:]) + if pk != nil { + if dsa.Verify(pk, hashed, r, s) { + return nil + } + return ErrSig + } + case RSASHA1, RSASHA256, RSASHA512: + pk := k.publicKeyRSA() + if pk != nil { + return rsa.VerifyPKCS1v15(pk, hash, hashed, sig) + } + case ECDSAP256SHA256, ECDSAP384SHA384: + pk := k.publicKeyECDSA() + r := big.NewInt(0) + r.SetBytes(sig[:len(sig)/2]) + s := big.NewInt(0) + s.SetBytes(sig[len(sig)/2:]) + if pk != nil { + if ecdsa.Verify(pk, hashed, r, s) { + return nil + } + return ErrSig + } + } + return ErrKeyAlg +} diff --git a/vendor/github.com/miekg/dns/singleinflight.go b/vendor/github.com/miekg/dns/singleinflight.go new file mode 100644 index 0000000..9573c7d --- /dev/null +++ b/vendor/github.com/miekg/dns/singleinflight.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Adapted for dns package usage by Miek Gieben. + +package dns + +import "sync" +import "time" + +// call is an in-flight or completed singleflight.Do call +type call struct { + wg sync.WaitGroup + val *Msg + rtt time.Duration + err error + dups int +} + +// singleflight represents a class of work and forms a namespace in +// which units of work can be executed with duplicate suppression. +type singleflight struct { + sync.Mutex // protects m + m map[string]*call // lazily initialized +} + +// Do executes and returns the results of the given function, making +// sure that only one execution is in-flight for a given key at a +// time. If a duplicate comes in, the duplicate caller waits for the +// original to complete and receives the same results. +// The return value shared indicates whether v was given to multiple callers. +func (g *singleflight) Do(key string, fn func() (*Msg, time.Duration, error)) (v *Msg, rtt time.Duration, err error, shared bool) { + g.Lock() + if g.m == nil { + g.m = make(map[string]*call) + } + if c, ok := g.m[key]; ok { + c.dups++ + g.Unlock() + c.wg.Wait() + return c.val, c.rtt, c.err, true + } + c := new(call) + c.wg.Add(1) + g.m[key] = c + g.Unlock() + + c.val, c.rtt, c.err = fn() + c.wg.Done() + + g.Lock() + delete(g.m, key) + g.Unlock() + + return c.val, c.rtt, c.err, c.dups > 0 +} diff --git a/vendor/github.com/miekg/dns/tlsa.go b/vendor/github.com/miekg/dns/tlsa.go new file mode 100644 index 0000000..f027787 --- /dev/null +++ b/vendor/github.com/miekg/dns/tlsa.go @@ -0,0 +1,86 @@ +package dns + +import ( + "crypto/sha256" + "crypto/sha512" + "crypto/x509" + "encoding/hex" + "errors" + "io" + "net" + "strconv" +) + +// CertificateToDANE converts a certificate to a hex string as used in the TLSA record. +func CertificateToDANE(selector, matchingType uint8, cert *x509.Certificate) (string, error) { + switch matchingType { + case 0: + switch selector { + case 0: + return hex.EncodeToString(cert.Raw), nil + case 1: + return hex.EncodeToString(cert.RawSubjectPublicKeyInfo), nil + } + case 1: + h := sha256.New() + switch selector { + case 0: + io.WriteString(h, string(cert.Raw)) + return hex.EncodeToString(h.Sum(nil)), nil + case 1: + io.WriteString(h, string(cert.RawSubjectPublicKeyInfo)) + return hex.EncodeToString(h.Sum(nil)), nil + } + case 2: + h := sha512.New() + switch selector { + case 0: + io.WriteString(h, string(cert.Raw)) + return hex.EncodeToString(h.Sum(nil)), nil + case 1: + io.WriteString(h, string(cert.RawSubjectPublicKeyInfo)) + return hex.EncodeToString(h.Sum(nil)), nil + } + } + return "", errors.New("dns: bad TLSA MatchingType or TLSA Selector") +} + +// Sign creates a TLSA record from an SSL certificate. +func (r *TLSA) Sign(usage, selector, matchingType int, cert *x509.Certificate) (err error) { + r.Hdr.Rrtype = TypeTLSA + r.Usage = uint8(usage) + r.Selector = uint8(selector) + r.MatchingType = uint8(matchingType) + + r.Certificate, err = CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err + } + return nil +} + +// Verify verifies a TLSA record against an SSL certificate. If it is OK +// a nil error is returned. +func (r *TLSA) Verify(cert *x509.Certificate) error { + c, err := CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err // Not also ErrSig? + } + if r.Certificate == c { + return nil + } + return ErrSig // ErrSig, really? +} + +// TLSAName returns the ownername of a TLSA resource record as per the +// rules specified in RFC 6698, Section 3. +func TLSAName(name, service, network string) (string, error) { + if !IsFqdn(name) { + return "", ErrFqdn + } + p, e := net.LookupPort(network, service) + if e != nil { + return "", e + } + return "_" + strconv.Itoa(p) + "_" + network + "." + name, nil +} diff --git a/vendor/github.com/miekg/dns/tsig.go b/vendor/github.com/miekg/dns/tsig.go new file mode 100644 index 0000000..d7bc250 --- /dev/null +++ b/vendor/github.com/miekg/dns/tsig.go @@ -0,0 +1,333 @@ +package dns + +import ( + "crypto/hmac" + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "encoding/hex" + "hash" + "io" + "strconv" + "strings" + "time" +) + +// HMAC hashing codes. These are transmitted as domain names. +const ( + HmacMD5 = "hmac-md5.sig-alg.reg.int." + HmacSHA1 = "hmac-sha1." + HmacSHA256 = "hmac-sha256." + HmacSHA512 = "hmac-sha512." +) + +// TSIG is the RR the holds the transaction signature of a message. +// See RFC 2845 and RFC 4635. +type TSIG struct { + Hdr RR_Header + Algorithm string `dns:"domain-name"` + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 + MACSize uint16 + MAC string `dns:"size-hex"` + OrigId uint16 + Error uint16 + OtherLen uint16 + OtherData string `dns:"size-hex"` +} + +func (rr *TSIG) Header() *RR_Header { + return &rr.Hdr +} + +// TSIG has no official presentation format, but this will suffice. + +func (rr *TSIG) String() string { + s := "\n;; TSIG PSEUDOSECTION:\n" + s += rr.Hdr.String() + + " " + rr.Algorithm + + " " + tsigTimeToString(rr.TimeSigned) + + " " + strconv.Itoa(int(rr.Fudge)) + + " " + strconv.Itoa(int(rr.MACSize)) + + " " + strings.ToUpper(rr.MAC) + + " " + strconv.Itoa(int(rr.OrigId)) + + " " + strconv.Itoa(int(rr.Error)) + // BIND prints NOERROR + " " + strconv.Itoa(int(rr.OtherLen)) + + " " + rr.OtherData + return s +} + +func (rr *TSIG) len() int { + return rr.Hdr.len() + len(rr.Algorithm) + 1 + 6 + + 4 + len(rr.MAC)/2 + 1 + 6 + len(rr.OtherData)/2 + 1 +} + +func (rr *TSIG) copy() RR { + return &TSIG{*rr.Hdr.copyHeader(), rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData} +} + +// The following values must be put in wireformat, so that the MAC can be calculated. +// RFC 2845, section 3.4.2. TSIG Variables. +type tsigWireFmt struct { + // From RR_Header + Name string `dns:"domain-name"` + Class uint16 + Ttl uint32 + // Rdata of the TSIG + Algorithm string `dns:"domain-name"` + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 + // MACSize, MAC and OrigId excluded + Error uint16 + OtherLen uint16 + OtherData string `dns:"size-hex"` +} + +// If we have the MAC use this type to convert it to wiredata. +// Section 3.4.3. Request MAC +type macWireFmt struct { + MACSize uint16 + MAC string `dns:"size-hex"` +} + +// 3.3. Time values used in TSIG calculations +type timerWireFmt struct { + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 +} + +// TsigGenerate fills out the TSIG record attached to the message. +// The message should contain +// a "stub" TSIG RR with the algorithm, key name (owner name of the RR), +// time fudge (defaults to 300 seconds) and the current time +// The TSIG MAC is saved in that Tsig RR. +// When TsigGenerate is called for the first time requestMAC is set to the empty string and +// timersOnly is false. +// If something goes wrong an error is returned, otherwise it is nil. +func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, string, error) { + if m.IsTsig() == nil { + panic("dns: TSIG not last RR in additional") + } + // If we barf here, the caller is to blame + rawsecret, err := fromBase64([]byte(secret)) + if err != nil { + return nil, "", err + } + + rr := m.Extra[len(m.Extra)-1].(*TSIG) + m.Extra = m.Extra[0 : len(m.Extra)-1] // kill the TSIG from the msg + mbuf, err := m.Pack() + if err != nil { + return nil, "", err + } + buf := tsigBuffer(mbuf, rr, requestMAC, timersOnly) + + t := new(TSIG) + var h hash.Hash + switch rr.Algorithm { + case HmacMD5: + h = hmac.New(md5.New, []byte(rawsecret)) + case HmacSHA1: + h = hmac.New(sha1.New, []byte(rawsecret)) + case HmacSHA256: + h = hmac.New(sha256.New, []byte(rawsecret)) + case HmacSHA512: + h = hmac.New(sha512.New, []byte(rawsecret)) + default: + return nil, "", ErrKeyAlg + } + io.WriteString(h, string(buf)) + t.MAC = hex.EncodeToString(h.Sum(nil)) + t.MACSize = uint16(len(t.MAC) / 2) // Size is half! + + t.Hdr = RR_Header{Name: rr.Hdr.Name, Rrtype: TypeTSIG, Class: ClassANY, Ttl: 0} + t.Fudge = rr.Fudge + t.TimeSigned = rr.TimeSigned + t.Algorithm = rr.Algorithm + t.OrigId = m.Id + + tbuf := make([]byte, t.len()) + if off, err := PackRR(t, tbuf, 0, nil, false); err == nil { + tbuf = tbuf[:off] // reset to actual size used + } else { + return nil, "", err + } + mbuf = append(mbuf, tbuf...) + rawSetExtraLen(mbuf, uint16(len(m.Extra)+1)) + return mbuf, t.MAC, nil +} + +// TsigVerify verifies the TSIG on a message. +// If the signature does not validate err contains the +// error, otherwise it is nil. +func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error { + rawsecret, err := fromBase64([]byte(secret)) + if err != nil { + return err + } + // Strip the TSIG from the incoming msg + stripped, tsig, err := stripTsig(msg) + if err != nil { + return err + } + + msgMAC, err := hex.DecodeString(tsig.MAC) + if err != nil { + return err + } + + buf := tsigBuffer(stripped, tsig, requestMAC, timersOnly) + + // Fudge factor works both ways. A message can arrive before it was signed because + // of clock skew. + now := uint64(time.Now().Unix()) + ti := now - tsig.TimeSigned + if now < tsig.TimeSigned { + ti = tsig.TimeSigned - now + } + if uint64(tsig.Fudge) < ti { + return ErrTime + } + + var h hash.Hash + switch tsig.Algorithm { + case HmacMD5: + h = hmac.New(md5.New, rawsecret) + case HmacSHA1: + h = hmac.New(sha1.New, rawsecret) + case HmacSHA256: + h = hmac.New(sha256.New, rawsecret) + case HmacSHA512: + h = hmac.New(sha512.New, rawsecret) + default: + return ErrKeyAlg + } + h.Write(buf) + if !hmac.Equal(h.Sum(nil), msgMAC) { + return ErrSig + } + return nil +} + +// Create a wiredata buffer for the MAC calculation. +func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []byte { + var buf []byte + if rr.TimeSigned == 0 { + rr.TimeSigned = uint64(time.Now().Unix()) + } + if rr.Fudge == 0 { + rr.Fudge = 300 // Standard (RFC) default. + } + + if requestMAC != "" { + m := new(macWireFmt) + m.MACSize = uint16(len(requestMAC) / 2) + m.MAC = requestMAC + buf = make([]byte, len(requestMAC)) // long enough + n, _ := PackStruct(m, buf, 0) + buf = buf[:n] + } + + tsigvar := make([]byte, DefaultMsgSize) + if timersOnly { + tsig := new(timerWireFmt) + tsig.TimeSigned = rr.TimeSigned + tsig.Fudge = rr.Fudge + n, _ := PackStruct(tsig, tsigvar, 0) + tsigvar = tsigvar[:n] + } else { + tsig := new(tsigWireFmt) + tsig.Name = strings.ToLower(rr.Hdr.Name) + tsig.Class = ClassANY + tsig.Ttl = rr.Hdr.Ttl + tsig.Algorithm = strings.ToLower(rr.Algorithm) + tsig.TimeSigned = rr.TimeSigned + tsig.Fudge = rr.Fudge + tsig.Error = rr.Error + tsig.OtherLen = rr.OtherLen + tsig.OtherData = rr.OtherData + n, _ := PackStruct(tsig, tsigvar, 0) + tsigvar = tsigvar[:n] + } + + if requestMAC != "" { + x := append(buf, msgbuf...) + buf = append(x, tsigvar...) + } else { + buf = append(msgbuf, tsigvar...) + } + return buf +} + +// Strip the TSIG from the raw message. +func stripTsig(msg []byte) ([]byte, *TSIG, error) { + // Copied from msg.go's Unpack() + // Header. + var dh Header + var err error + dns := new(Msg) + rr := new(TSIG) + off := 0 + tsigoff := 0 + if off, err = UnpackStruct(&dh, msg, off); err != nil { + return nil, nil, err + } + if dh.Arcount == 0 { + return nil, nil, ErrNoSig + } + // Rcode, see msg.go Unpack() + if int(dh.Bits&0xF) == RcodeNotAuth { + return nil, nil, ErrAuth + } + + // Arrays. + dns.Question = make([]Question, dh.Qdcount) + dns.Answer = make([]RR, dh.Ancount) + dns.Ns = make([]RR, dh.Nscount) + dns.Extra = make([]RR, dh.Arcount) + + for i := 0; i < len(dns.Question); i++ { + off, err = UnpackStruct(&dns.Question[i], msg, off) + if err != nil { + return nil, nil, err + } + } + for i := 0; i < len(dns.Answer); i++ { + dns.Answer[i], off, err = UnpackRR(msg, off) + if err != nil { + return nil, nil, err + } + } + for i := 0; i < len(dns.Ns); i++ { + dns.Ns[i], off, err = UnpackRR(msg, off) + if err != nil { + return nil, nil, err + } + } + for i := 0; i < len(dns.Extra); i++ { + tsigoff = off + dns.Extra[i], off, err = UnpackRR(msg, off) + if err != nil { + return nil, nil, err + } + if dns.Extra[i].Header().Rrtype == TypeTSIG { + rr = dns.Extra[i].(*TSIG) + // Adjust Arcount. + arcount, _ := unpackUint16(msg, 10) + msg[10], msg[11] = packUint16(arcount - 1) + break + } + } + if rr == nil { + return nil, nil, ErrNoSig + } + return msg[:tsigoff], rr, nil +} + +// Translate the TSIG time signed into a date. There is no +// need for RFC1982 calculations as this date is 48 bits. +func tsigTimeToString(t uint64) string { + ti := time.Unix(int64(t), 0).UTC() + return ti.Format("20060102150405") +} diff --git a/vendor/github.com/miekg/dns/types.go b/vendor/github.com/miekg/dns/types.go new file mode 100644 index 0000000..55a50b8 --- /dev/null +++ b/vendor/github.com/miekg/dns/types.go @@ -0,0 +1,1741 @@ +package dns + +import ( + "encoding/base64" + "fmt" + "net" + "strconv" + "strings" + "time" +) + +type ( + // Type is a DNS type. + Type uint16 + // Class is a DNS class. + Class uint16 + // Name is a DNS domain name. + Name string +) + +// Packet formats + +// Wire constants and supported types. +const ( + // valid RR_Header.Rrtype and Question.qtype + + TypeNone uint16 = 0 + TypeA uint16 = 1 + TypeNS uint16 = 2 + TypeMD uint16 = 3 + TypeMF uint16 = 4 + TypeCNAME uint16 = 5 + TypeSOA uint16 = 6 + TypeMB uint16 = 7 + TypeMG uint16 = 8 + TypeMR uint16 = 9 + TypeNULL uint16 = 10 + TypeWKS uint16 = 11 + TypePTR uint16 = 12 + TypeHINFO uint16 = 13 + TypeMINFO uint16 = 14 + TypeMX uint16 = 15 + TypeTXT uint16 = 16 + TypeRP uint16 = 17 + TypeAFSDB uint16 = 18 + TypeX25 uint16 = 19 + TypeISDN uint16 = 20 + TypeRT uint16 = 21 + TypeNSAPPTR uint16 = 23 + TypeSIG uint16 = 24 + TypeKEY uint16 = 25 + TypePX uint16 = 26 + TypeGPOS uint16 = 27 + TypeAAAA uint16 = 28 + TypeLOC uint16 = 29 + TypeNXT uint16 = 30 + TypeEID uint16 = 31 + TypeNIMLOC uint16 = 32 + TypeSRV uint16 = 33 + TypeATMA uint16 = 34 + TypeNAPTR uint16 = 35 + TypeKX uint16 = 36 + TypeCERT uint16 = 37 + TypeDNAME uint16 = 39 + TypeOPT uint16 = 41 // EDNS + TypeDS uint16 = 43 + TypeSSHFP uint16 = 44 + TypeIPSECKEY uint16 = 45 + TypeRRSIG uint16 = 46 + TypeNSEC uint16 = 47 + TypeDNSKEY uint16 = 48 + TypeDHCID uint16 = 49 + TypeNSEC3 uint16 = 50 + TypeNSEC3PARAM uint16 = 51 + TypeTLSA uint16 = 52 + TypeHIP uint16 = 55 + TypeNINFO uint16 = 56 + TypeRKEY uint16 = 57 + TypeTALINK uint16 = 58 + TypeCDS uint16 = 59 + TypeCDNSKEY uint16 = 60 + TypeOPENPGPKEY uint16 = 61 + TypeSPF uint16 = 99 + TypeUINFO uint16 = 100 + TypeUID uint16 = 101 + TypeGID uint16 = 102 + TypeUNSPEC uint16 = 103 + TypeNID uint16 = 104 + TypeL32 uint16 = 105 + TypeL64 uint16 = 106 + TypeLP uint16 = 107 + TypeEUI48 uint16 = 108 + TypeEUI64 uint16 = 109 + TypeURI uint16 = 256 + TypeCAA uint16 = 257 + + TypeTKEY uint16 = 249 + TypeTSIG uint16 = 250 + + // valid Question.Qtype only + TypeIXFR uint16 = 251 + TypeAXFR uint16 = 252 + TypeMAILB uint16 = 253 + TypeMAILA uint16 = 254 + TypeANY uint16 = 255 + + TypeTA uint16 = 32768 + TypeDLV uint16 = 32769 + TypeReserved uint16 = 65535 + + // valid Question.Qclass + ClassINET = 1 + ClassCSNET = 2 + ClassCHAOS = 3 + ClassHESIOD = 4 + ClassNONE = 254 + ClassANY = 255 + + // Message Response Codes. + RcodeSuccess = 0 + RcodeFormatError = 1 + RcodeServerFailure = 2 + RcodeNameError = 3 + RcodeNotImplemented = 4 + RcodeRefused = 5 + RcodeYXDomain = 6 + RcodeYXRrset = 7 + RcodeNXRrset = 8 + RcodeNotAuth = 9 + RcodeNotZone = 10 + RcodeBadSig = 16 // TSIG + RcodeBadVers = 16 // EDNS0 + RcodeBadKey = 17 + RcodeBadTime = 18 + RcodeBadMode = 19 // TKEY + RcodeBadName = 20 + RcodeBadAlg = 21 + RcodeBadTrunc = 22 // TSIG + + // Message Opcodes. There is no 3. + OpcodeQuery = 0 + OpcodeIQuery = 1 + OpcodeStatus = 2 + OpcodeNotify = 4 + OpcodeUpdate = 5 +) + +// Headers is the wire format for the DNS packet header. +type Header struct { + Id uint16 + Bits uint16 + Qdcount, Ancount, Nscount, Arcount uint16 +} + +const ( + headerSize = 12 + + // Header.Bits + _QR = 1 << 15 // query/response (response=1) + _AA = 1 << 10 // authoritative + _TC = 1 << 9 // truncated + _RD = 1 << 8 // recursion desired + _RA = 1 << 7 // recursion available + _Z = 1 << 6 // Z + _AD = 1 << 5 // authticated data + _CD = 1 << 4 // checking disabled + + LOC_EQUATOR = 1 << 31 // RFC 1876, Section 2. + LOC_PRIMEMERIDIAN = 1 << 31 // RFC 1876, Section 2. + + LOC_HOURS = 60 * 1000 + LOC_DEGREES = 60 * LOC_HOURS + + LOC_ALTITUDEBASE = 100000 +) + +// Different Certificate Types, see RFC 4398, Section 2.1 +const ( + CertPKIX = 1 + iota + CertSPKI + CertPGP + CertIPIX + CertISPKI + CertIPGP + CertACPKIX + CertIACPKIX + CertURI = 253 + CertOID = 254 +) + +// CertTypeToString converts the Cert Type to its string representation. +// See RFC 4398 and RFC 6944. +var CertTypeToString = map[uint16]string{ + CertPKIX: "PKIX", + CertSPKI: "SPKI", + CertPGP: "PGP", + CertIPIX: "IPIX", + CertISPKI: "ISPKI", + CertIPGP: "IPGP", + CertACPKIX: "ACPKIX", + CertIACPKIX: "IACPKIX", + CertURI: "URI", + CertOID: "OID", +} + +// StringToCertType is the reverseof CertTypeToString. +var StringToCertType = reverseInt16(CertTypeToString) + +// Question holds a DNS question. There can be multiple questions in the +// question section of a message. Usually there is just one. +type Question struct { + Name string `dns:"cdomain-name"` // "cdomain-name" specifies encoding (and may be compressed) + Qtype uint16 + Qclass uint16 +} + +func (q *Question) String() (s string) { + // prefix with ; (as in dig) + s = ";" + sprintName(q.Name) + "\t" + s += Class(q.Qclass).String() + "\t" + s += " " + Type(q.Qtype).String() + return s +} + +func (q *Question) len() int { + l := len(q.Name) + 1 + return l + 4 +} + +// ANY is a wildcard record. See RFC 1035, Section 3.2.3. ANY +// is named "*" there. +type ANY struct { + Hdr RR_Header + // Does not have any rdata +} + +func (rr *ANY) Header() *RR_Header { return &rr.Hdr } +func (rr *ANY) copy() RR { return &ANY{*rr.Hdr.copyHeader()} } +func (rr *ANY) String() string { return rr.Hdr.String() } +func (rr *ANY) len() int { return rr.Hdr.len() } + +type CNAME struct { + Hdr RR_Header + Target string `dns:"cdomain-name"` +} + +func (rr *CNAME) Header() *RR_Header { return &rr.Hdr } +func (rr *CNAME) copy() RR { return &CNAME{*rr.Hdr.copyHeader(), sprintName(rr.Target)} } +func (rr *CNAME) String() string { return rr.Hdr.String() + rr.Target } +func (rr *CNAME) len() int { return rr.Hdr.len() + len(rr.Target) + 1 } + +type HINFO struct { + Hdr RR_Header + Cpu string + Os string +} + +func (rr *HINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *HINFO) copy() RR { return &HINFO{*rr.Hdr.copyHeader(), rr.Cpu, rr.Os} } +func (rr *HINFO) String() string { + return rr.Hdr.String() + sprintTxt([]string{rr.Cpu, rr.Os}) +} +func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) } + +type MB struct { + Hdr RR_Header + Mb string `dns:"cdomain-name"` +} + +func (rr *MB) Header() *RR_Header { return &rr.Hdr } +func (rr *MB) copy() RR { return &MB{*rr.Hdr.copyHeader(), sprintName(rr.Mb)} } + +func (rr *MB) String() string { return rr.Hdr.String() + rr.Mb } +func (rr *MB) len() int { return rr.Hdr.len() + len(rr.Mb) + 1 } + +type MG struct { + Hdr RR_Header + Mg string `dns:"cdomain-name"` +} + +func (rr *MG) Header() *RR_Header { return &rr.Hdr } +func (rr *MG) copy() RR { return &MG{*rr.Hdr.copyHeader(), rr.Mg} } +func (rr *MG) len() int { l := len(rr.Mg) + 1; return rr.Hdr.len() + l } +func (rr *MG) String() string { return rr.Hdr.String() + sprintName(rr.Mg) } + +type MINFO struct { + Hdr RR_Header + Rmail string `dns:"cdomain-name"` + Email string `dns:"cdomain-name"` +} + +func (rr *MINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *MINFO) copy() RR { return &MINFO{*rr.Hdr.copyHeader(), rr.Rmail, rr.Email} } + +func (rr *MINFO) String() string { + return rr.Hdr.String() + sprintName(rr.Rmail) + " " + sprintName(rr.Email) +} + +func (rr *MINFO) len() int { + l := len(rr.Rmail) + 1 + n := len(rr.Email) + 1 + return rr.Hdr.len() + l + n +} + +type MR struct { + Hdr RR_Header + Mr string `dns:"cdomain-name"` +} + +func (rr *MR) Header() *RR_Header { return &rr.Hdr } +func (rr *MR) copy() RR { return &MR{*rr.Hdr.copyHeader(), rr.Mr} } +func (rr *MR) len() int { l := len(rr.Mr) + 1; return rr.Hdr.len() + l } + +func (rr *MR) String() string { + return rr.Hdr.String() + sprintName(rr.Mr) +} + +type MF struct { + Hdr RR_Header + Mf string `dns:"cdomain-name"` +} + +func (rr *MF) Header() *RR_Header { return &rr.Hdr } +func (rr *MF) copy() RR { return &MF{*rr.Hdr.copyHeader(), rr.Mf} } +func (rr *MF) len() int { return rr.Hdr.len() + len(rr.Mf) + 1 } + +func (rr *MF) String() string { + return rr.Hdr.String() + sprintName(rr.Mf) +} + +type MD struct { + Hdr RR_Header + Md string `dns:"cdomain-name"` +} + +func (rr *MD) Header() *RR_Header { return &rr.Hdr } +func (rr *MD) copy() RR { return &MD{*rr.Hdr.copyHeader(), rr.Md} } +func (rr *MD) len() int { return rr.Hdr.len() + len(rr.Md) + 1 } + +func (rr *MD) String() string { + return rr.Hdr.String() + sprintName(rr.Md) +} + +type MX struct { + Hdr RR_Header + Preference uint16 + Mx string `dns:"cdomain-name"` +} + +func (rr *MX) Header() *RR_Header { return &rr.Hdr } +func (rr *MX) copy() RR { return &MX{*rr.Hdr.copyHeader(), rr.Preference, rr.Mx} } +func (rr *MX) len() int { l := len(rr.Mx) + 1; return rr.Hdr.len() + l + 2 } + +func (rr *MX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Mx) +} + +type AFSDB struct { + Hdr RR_Header + Subtype uint16 + Hostname string `dns:"cdomain-name"` +} + +func (rr *AFSDB) Header() *RR_Header { return &rr.Hdr } +func (rr *AFSDB) copy() RR { return &AFSDB{*rr.Hdr.copyHeader(), rr.Subtype, rr.Hostname} } +func (rr *AFSDB) len() int { l := len(rr.Hostname) + 1; return rr.Hdr.len() + l + 2 } + +func (rr *AFSDB) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Subtype)) + " " + sprintName(rr.Hostname) +} + +type X25 struct { + Hdr RR_Header + PSDNAddress string +} + +func (rr *X25) Header() *RR_Header { return &rr.Hdr } +func (rr *X25) copy() RR { return &X25{*rr.Hdr.copyHeader(), rr.PSDNAddress} } +func (rr *X25) len() int { return rr.Hdr.len() + len(rr.PSDNAddress) + 1 } + +func (rr *X25) String() string { + return rr.Hdr.String() + rr.PSDNAddress +} + +type RT struct { + Hdr RR_Header + Preference uint16 + Host string `dns:"cdomain-name"` +} + +func (rr *RT) Header() *RR_Header { return &rr.Hdr } +func (rr *RT) copy() RR { return &RT{*rr.Hdr.copyHeader(), rr.Preference, rr.Host} } +func (rr *RT) len() int { l := len(rr.Host) + 1; return rr.Hdr.len() + l + 2 } + +func (rr *RT) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Host) +} + +type NS struct { + Hdr RR_Header + Ns string `dns:"cdomain-name"` +} + +func (rr *NS) Header() *RR_Header { return &rr.Hdr } +func (rr *NS) len() int { l := len(rr.Ns) + 1; return rr.Hdr.len() + l } +func (rr *NS) copy() RR { return &NS{*rr.Hdr.copyHeader(), rr.Ns} } + +func (rr *NS) String() string { + return rr.Hdr.String() + sprintName(rr.Ns) +} + +type PTR struct { + Hdr RR_Header + Ptr string `dns:"cdomain-name"` +} + +func (rr *PTR) Header() *RR_Header { return &rr.Hdr } +func (rr *PTR) copy() RR { return &PTR{*rr.Hdr.copyHeader(), rr.Ptr} } +func (rr *PTR) len() int { l := len(rr.Ptr) + 1; return rr.Hdr.len() + l } + +func (rr *PTR) String() string { + return rr.Hdr.String() + sprintName(rr.Ptr) +} + +type RP struct { + Hdr RR_Header + Mbox string `dns:"domain-name"` + Txt string `dns:"domain-name"` +} + +func (rr *RP) Header() *RR_Header { return &rr.Hdr } +func (rr *RP) copy() RR { return &RP{*rr.Hdr.copyHeader(), rr.Mbox, rr.Txt} } +func (rr *RP) len() int { return rr.Hdr.len() + len(rr.Mbox) + 1 + len(rr.Txt) + 1 } + +func (rr *RP) String() string { + return rr.Hdr.String() + rr.Mbox + " " + sprintTxt([]string{rr.Txt}) +} + +type SOA struct { + Hdr RR_Header + Ns string `dns:"cdomain-name"` + Mbox string `dns:"cdomain-name"` + Serial uint32 + Refresh uint32 + Retry uint32 + Expire uint32 + Minttl uint32 +} + +func (rr *SOA) Header() *RR_Header { return &rr.Hdr } +func (rr *SOA) copy() RR { + return &SOA{*rr.Hdr.copyHeader(), rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl} +} + +func (rr *SOA) String() string { + return rr.Hdr.String() + sprintName(rr.Ns) + " " + sprintName(rr.Mbox) + + " " + strconv.FormatInt(int64(rr.Serial), 10) + + " " + strconv.FormatInt(int64(rr.Refresh), 10) + + " " + strconv.FormatInt(int64(rr.Retry), 10) + + " " + strconv.FormatInt(int64(rr.Expire), 10) + + " " + strconv.FormatInt(int64(rr.Minttl), 10) +} + +func (rr *SOA) len() int { + l := len(rr.Ns) + 1 + n := len(rr.Mbox) + 1 + return rr.Hdr.len() + l + n + 20 +} + +type TXT struct { + Hdr RR_Header + Txt []string `dns:"txt"` +} + +func (rr *TXT) Header() *RR_Header { return &rr.Hdr } +func (rr *TXT) copy() RR { + cp := make([]string, len(rr.Txt), cap(rr.Txt)) + copy(cp, rr.Txt) + return &TXT{*rr.Hdr.copyHeader(), cp} +} + +func (rr *TXT) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } + +func sprintName(s string) string { + src := []byte(s) + dst := make([]byte, 0, len(src)) + for i := 0; i < len(src); { + if i+1 < len(src) && src[i] == '\\' && src[i+1] == '.' { + dst = append(dst, src[i:i+2]...) + i += 2 + } else { + b, n := nextByte(src, i) + if n == 0 { + i++ // dangling back slash + } else if b == '.' { + dst = append(dst, b) + } else { + dst = appendDomainNameByte(dst, b) + } + i += n + } + } + return string(dst) +} + +func sprintTxtOctet(s string) string { + src := []byte(s) + dst := make([]byte, 0, len(src)) + dst = append(dst, '"') + for i := 0; i < len(src); { + if i+1 < len(src) && src[i] == '\\' && src[i+1] == '.' { + dst = append(dst, src[i:i+2]...) + i += 2 + } else { + b, n := nextByte(src, i) + if n == 0 { + i++ // dangling back slash + } else if b == '.' { + dst = append(dst, b) + } else { + if b < ' ' || b > '~' { + dst = appendByte(dst, b) + } else { + dst = append(dst, b) + } + } + i += n + } + } + dst = append(dst, '"') + return string(dst) +} + +func sprintTxt(txt []string) string { + var out []byte + for i, s := range txt { + if i > 0 { + out = append(out, ` "`...) + } else { + out = append(out, '"') + } + bs := []byte(s) + for j := 0; j < len(bs); { + b, n := nextByte(bs, j) + if n == 0 { + break + } + out = appendTXTStringByte(out, b) + j += n + } + out = append(out, '"') + } + return string(out) +} + +func appendDomainNameByte(s []byte, b byte) []byte { + switch b { + case '.', ' ', '\'', '@', ';', '(', ')': // additional chars to escape + return append(s, '\\', b) + } + return appendTXTStringByte(s, b) +} + +func appendTXTStringByte(s []byte, b byte) []byte { + switch b { + case '\t': + return append(s, '\\', 't') + case '\r': + return append(s, '\\', 'r') + case '\n': + return append(s, '\\', 'n') + case '"', '\\': + return append(s, '\\', b) + } + if b < ' ' || b > '~' { + return appendByte(s, b) + } + return append(s, b) +} + +func appendByte(s []byte, b byte) []byte { + var buf [3]byte + bufs := strconv.AppendInt(buf[:0], int64(b), 10) + s = append(s, '\\') + for i := 0; i < 3-len(bufs); i++ { + s = append(s, '0') + } + for _, r := range bufs { + s = append(s, r) + } + return s +} + +func nextByte(b []byte, offset int) (byte, int) { + if offset >= len(b) { + return 0, 0 + } + if b[offset] != '\\' { + // not an escape sequence + return b[offset], 1 + } + switch len(b) - offset { + case 1: // dangling escape + return 0, 0 + case 2, 3: // too short to be \ddd + default: // maybe \ddd + if isDigit(b[offset+1]) && isDigit(b[offset+2]) && isDigit(b[offset+3]) { + return dddToByte(b[offset+1:]), 4 + } + } + // not \ddd, maybe a control char + switch b[offset+1] { + case 't': + return '\t', 2 + case 'r': + return '\r', 2 + case 'n': + return '\n', 2 + default: + return b[offset+1], 2 + } +} + +func (rr *TXT) len() int { + l := rr.Hdr.len() + for _, t := range rr.Txt { + l += len(t) + 1 + } + return l +} + +type SPF struct { + Hdr RR_Header + Txt []string `dns:"txt"` +} + +func (rr *SPF) Header() *RR_Header { return &rr.Hdr } +func (rr *SPF) copy() RR { + cp := make([]string, len(rr.Txt), cap(rr.Txt)) + copy(cp, rr.Txt) + return &SPF{*rr.Hdr.copyHeader(), cp} +} + +func (rr *SPF) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } + +func (rr *SPF) len() int { + l := rr.Hdr.len() + for _, t := range rr.Txt { + l += len(t) + 1 + } + return l +} + +type SRV struct { + Hdr RR_Header + Priority uint16 + Weight uint16 + Port uint16 + Target string `dns:"domain-name"` +} + +func (rr *SRV) Header() *RR_Header { return &rr.Hdr } +func (rr *SRV) len() int { l := len(rr.Target) + 1; return rr.Hdr.len() + l + 6 } +func (rr *SRV) copy() RR { + return &SRV{*rr.Hdr.copyHeader(), rr.Priority, rr.Weight, rr.Port, rr.Target} +} + +func (rr *SRV) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Priority)) + " " + + strconv.Itoa(int(rr.Weight)) + " " + + strconv.Itoa(int(rr.Port)) + " " + sprintName(rr.Target) +} + +type NAPTR struct { + Hdr RR_Header + Order uint16 + Preference uint16 + Flags string + Service string + Regexp string + Replacement string `dns:"domain-name"` +} + +func (rr *NAPTR) Header() *RR_Header { return &rr.Hdr } +func (rr *NAPTR) copy() RR { + return &NAPTR{*rr.Hdr.copyHeader(), rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement} +} + +func (rr *NAPTR) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Order)) + " " + + strconv.Itoa(int(rr.Preference)) + " " + + "\"" + rr.Flags + "\" " + + "\"" + rr.Service + "\" " + + "\"" + rr.Regexp + "\" " + + rr.Replacement +} + +func (rr *NAPTR) len() int { + return rr.Hdr.len() + 4 + len(rr.Flags) + 1 + len(rr.Service) + 1 + + len(rr.Regexp) + 1 + len(rr.Replacement) + 1 +} + +// The CERT resource record, see RFC 4398. +type CERT struct { + Hdr RR_Header + Type uint16 + KeyTag uint16 + Algorithm uint8 + Certificate string `dns:"base64"` +} + +func (rr *CERT) Header() *RR_Header { return &rr.Hdr } +func (rr *CERT) copy() RR { + return &CERT{*rr.Hdr.copyHeader(), rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate} +} + +func (rr *CERT) String() string { + var ( + ok bool + certtype, algorithm string + ) + if certtype, ok = CertTypeToString[rr.Type]; !ok { + certtype = strconv.Itoa(int(rr.Type)) + } + if algorithm, ok = AlgorithmToString[rr.Algorithm]; !ok { + algorithm = strconv.Itoa(int(rr.Algorithm)) + } + return rr.Hdr.String() + certtype + + " " + strconv.Itoa(int(rr.KeyTag)) + + " " + algorithm + + " " + rr.Certificate +} + +func (rr *CERT) len() int { + return rr.Hdr.len() + 5 + + base64.StdEncoding.DecodedLen(len(rr.Certificate)) +} + +// The DNAME resource record, see RFC 2672. +type DNAME struct { + Hdr RR_Header + Target string `dns:"domain-name"` +} + +func (rr *DNAME) Header() *RR_Header { return &rr.Hdr } +func (rr *DNAME) copy() RR { return &DNAME{*rr.Hdr.copyHeader(), rr.Target} } +func (rr *DNAME) len() int { l := len(rr.Target) + 1; return rr.Hdr.len() + l } + +func (rr *DNAME) String() string { + return rr.Hdr.String() + sprintName(rr.Target) +} + +type A struct { + Hdr RR_Header + A net.IP `dns:"a"` +} + +func (rr *A) Header() *RR_Header { return &rr.Hdr } +func (rr *A) copy() RR { return &A{*rr.Hdr.copyHeader(), copyIP(rr.A)} } +func (rr *A) len() int { return rr.Hdr.len() + net.IPv4len } + +func (rr *A) String() string { + if rr.A == nil { + return rr.Hdr.String() + } + return rr.Hdr.String() + rr.A.String() +} + +type AAAA struct { + Hdr RR_Header + AAAA net.IP `dns:"aaaa"` +} + +func (rr *AAAA) Header() *RR_Header { return &rr.Hdr } +func (rr *AAAA) copy() RR { return &AAAA{*rr.Hdr.copyHeader(), copyIP(rr.AAAA)} } +func (rr *AAAA) len() int { return rr.Hdr.len() + net.IPv6len } + +func (rr *AAAA) String() string { + if rr.AAAA == nil { + return rr.Hdr.String() + } + return rr.Hdr.String() + rr.AAAA.String() +} + +type PX struct { + Hdr RR_Header + Preference uint16 + Map822 string `dns:"domain-name"` + Mapx400 string `dns:"domain-name"` +} + +func (rr *PX) Header() *RR_Header { return &rr.Hdr } +func (rr *PX) copy() RR { return &PX{*rr.Hdr.copyHeader(), rr.Preference, rr.Map822, rr.Mapx400} } +func (rr *PX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Map822) + " " + sprintName(rr.Mapx400) +} +func (rr *PX) len() int { return rr.Hdr.len() + 2 + len(rr.Map822) + 1 + len(rr.Mapx400) + 1 } + +type GPOS struct { + Hdr RR_Header + Longitude string + Latitude string + Altitude string +} + +func (rr *GPOS) Header() *RR_Header { return &rr.Hdr } +func (rr *GPOS) copy() RR { return &GPOS{*rr.Hdr.copyHeader(), rr.Longitude, rr.Latitude, rr.Altitude} } +func (rr *GPOS) len() int { + return rr.Hdr.len() + len(rr.Longitude) + len(rr.Latitude) + len(rr.Altitude) + 3 +} +func (rr *GPOS) String() string { + return rr.Hdr.String() + rr.Longitude + " " + rr.Latitude + " " + rr.Altitude +} + +type LOC struct { + Hdr RR_Header + Version uint8 + Size uint8 + HorizPre uint8 + VertPre uint8 + Latitude uint32 + Longitude uint32 + Altitude uint32 +} + +func (rr *LOC) Header() *RR_Header { return &rr.Hdr } +func (rr *LOC) len() int { return rr.Hdr.len() + 4 + 12 } +func (rr *LOC) copy() RR { + return &LOC{*rr.Hdr.copyHeader(), rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude} +} + +// cmToM takes a cm value expressed in RFC1876 SIZE mantissa/exponent +// format and returns a string in m (two decimals for the cm) +func cmToM(m, e uint8) string { + if e < 2 { + if e == 1 { + m *= 10 + } + + return fmt.Sprintf("0.%02d", m) + } + + s := fmt.Sprintf("%d", m) + for e > 2 { + s += "0" + e-- + } + return s +} + +func (rr *LOC) String() string { + s := rr.Hdr.String() + + lat := rr.Latitude + ns := "N" + if lat > LOC_EQUATOR { + lat = lat - LOC_EQUATOR + } else { + ns = "S" + lat = LOC_EQUATOR - lat + } + h := lat / LOC_DEGREES + lat = lat % LOC_DEGREES + m := lat / LOC_HOURS + lat = lat % LOC_HOURS + s += fmt.Sprintf("%02d %02d %0.3f %s ", h, m, (float64(lat) / 1000), ns) + + lon := rr.Longitude + ew := "E" + if lon > LOC_PRIMEMERIDIAN { + lon = lon - LOC_PRIMEMERIDIAN + } else { + ew = "W" + lon = LOC_PRIMEMERIDIAN - lon + } + h = lon / LOC_DEGREES + lon = lon % LOC_DEGREES + m = lon / LOC_HOURS + lon = lon % LOC_HOURS + s += fmt.Sprintf("%02d %02d %0.3f %s ", h, m, (float64(lon) / 1000), ew) + + var alt = float64(rr.Altitude) / 100 + alt -= LOC_ALTITUDEBASE + if rr.Altitude%100 != 0 { + s += fmt.Sprintf("%.2fm ", alt) + } else { + s += fmt.Sprintf("%.0fm ", alt) + } + + s += cmToM((rr.Size&0xf0)>>4, rr.Size&0x0f) + "m " + s += cmToM((rr.HorizPre&0xf0)>>4, rr.HorizPre&0x0f) + "m " + s += cmToM((rr.VertPre&0xf0)>>4, rr.VertPre&0x0f) + "m" + + return s +} + +// SIG is identical to RRSIG and nowadays only used for SIG(0), RFC2931. +type SIG struct { + RRSIG +} + +type RRSIG struct { + Hdr RR_Header + TypeCovered uint16 + Algorithm uint8 + Labels uint8 + OrigTtl uint32 + Expiration uint32 + Inception uint32 + KeyTag uint16 + SignerName string `dns:"domain-name"` + Signature string `dns:"base64"` +} + +func (rr *RRSIG) Header() *RR_Header { return &rr.Hdr } +func (rr *RRSIG) copy() RR { + return &RRSIG{*rr.Hdr.copyHeader(), rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature} +} + +func (rr *RRSIG) String() string { + s := rr.Hdr.String() + s += Type(rr.TypeCovered).String() + s += " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.Labels)) + + " " + strconv.FormatInt(int64(rr.OrigTtl), 10) + + " " + TimeToString(rr.Expiration) + + " " + TimeToString(rr.Inception) + + " " + strconv.Itoa(int(rr.KeyTag)) + + " " + sprintName(rr.SignerName) + + " " + rr.Signature + return s +} + +func (rr *RRSIG) len() int { + return rr.Hdr.len() + len(rr.SignerName) + 1 + + base64.StdEncoding.DecodedLen(len(rr.Signature)) + 18 +} + +type NSEC struct { + Hdr RR_Header + NextDomain string `dns:"domain-name"` + TypeBitMap []uint16 `dns:"nsec"` +} + +func (rr *NSEC) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC) copy() RR { + cp := make([]uint16, len(rr.TypeBitMap), cap(rr.TypeBitMap)) + copy(cp, rr.TypeBitMap) + return &NSEC{*rr.Hdr.copyHeader(), rr.NextDomain, cp} +} + +func (rr *NSEC) String() string { + s := rr.Hdr.String() + sprintName(rr.NextDomain) + for i := 0; i < len(rr.TypeBitMap); i++ { + s += " " + Type(rr.TypeBitMap[i]).String() + } + return s +} + +func (rr *NSEC) len() int { + l := rr.Hdr.len() + len(rr.NextDomain) + 1 + lastwindow := uint32(2 ^ 32 + 1) + for _, t := range rr.TypeBitMap { + window := t / 256 + if uint32(window) != lastwindow { + l += 1 + 32 + } + lastwindow = uint32(window) + } + return l +} + +type DLV struct { + DS +} + +type CDS struct { + DS +} + +type DS struct { + Hdr RR_Header + KeyTag uint16 + Algorithm uint8 + DigestType uint8 + Digest string `dns:"hex"` +} + +func (rr *DS) Header() *RR_Header { return &rr.Hdr } +func (rr *DS) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } +func (rr *DS) copy() RR { + return &DS{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} +} + +func (rr *DS) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.DigestType)) + + " " + strings.ToUpper(rr.Digest) +} + +type KX struct { + Hdr RR_Header + Preference uint16 + Exchanger string `dns:"domain-name"` +} + +func (rr *KX) Header() *RR_Header { return &rr.Hdr } +func (rr *KX) len() int { return rr.Hdr.len() + 2 + len(rr.Exchanger) + 1 } +func (rr *KX) copy() RR { return &KX{*rr.Hdr.copyHeader(), rr.Preference, rr.Exchanger} } + +func (rr *KX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + + " " + sprintName(rr.Exchanger) +} + +type TA struct { + Hdr RR_Header + KeyTag uint16 + Algorithm uint8 + DigestType uint8 + Digest string `dns:"hex"` +} + +func (rr *TA) Header() *RR_Header { return &rr.Hdr } +func (rr *TA) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } +func (rr *TA) copy() RR { + return &TA{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} +} + +func (rr *TA) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.DigestType)) + + " " + strings.ToUpper(rr.Digest) +} + +type TALINK struct { + Hdr RR_Header + PreviousName string `dns:"domain-name"` + NextName string `dns:"domain-name"` +} + +func (rr *TALINK) Header() *RR_Header { return &rr.Hdr } +func (rr *TALINK) copy() RR { return &TALINK{*rr.Hdr.copyHeader(), rr.PreviousName, rr.NextName} } +func (rr *TALINK) len() int { return rr.Hdr.len() + len(rr.PreviousName) + len(rr.NextName) + 2 } + +func (rr *TALINK) String() string { + return rr.Hdr.String() + + sprintName(rr.PreviousName) + " " + sprintName(rr.NextName) +} + +type SSHFP struct { + Hdr RR_Header + Algorithm uint8 + Type uint8 + FingerPrint string `dns:"hex"` +} + +func (rr *SSHFP) Header() *RR_Header { return &rr.Hdr } +func (rr *SSHFP) len() int { return rr.Hdr.len() + 2 + len(rr.FingerPrint)/2 } +func (rr *SSHFP) copy() RR { + return &SSHFP{*rr.Hdr.copyHeader(), rr.Algorithm, rr.Type, rr.FingerPrint} +} + +func (rr *SSHFP) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.Type)) + + " " + strings.ToUpper(rr.FingerPrint) +} + +type IPSECKEY struct { + Hdr RR_Header + Precedence uint8 + // GatewayType: 1: A record, 2: AAAA record, 3: domainname. + // 0 is use for no type and GatewayName should be "." then. + GatewayType uint8 + Algorithm uint8 + // Gateway can be an A record, AAAA record or a domain name. + GatewayA net.IP `dns:"a"` + GatewayAAAA net.IP `dns:"aaaa"` + GatewayName string `dns:"domain-name"` + PublicKey string `dns:"base64"` +} + +func (rr *IPSECKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *IPSECKEY) copy() RR { + return &IPSECKEY{*rr.Hdr.copyHeader(), rr.Precedence, rr.GatewayType, rr.Algorithm, rr.GatewayA, rr.GatewayAAAA, rr.GatewayName, rr.PublicKey} +} + +func (rr *IPSECKEY) String() string { + s := rr.Hdr.String() + strconv.Itoa(int(rr.Precedence)) + + " " + strconv.Itoa(int(rr.GatewayType)) + + " " + strconv.Itoa(int(rr.Algorithm)) + switch rr.GatewayType { + case 0: + fallthrough + case 3: + s += " " + rr.GatewayName + case 1: + s += " " + rr.GatewayA.String() + case 2: + s += " " + rr.GatewayAAAA.String() + default: + s += " ." + } + s += " " + rr.PublicKey + return s +} + +func (rr *IPSECKEY) len() int { + l := rr.Hdr.len() + 3 + 1 + switch rr.GatewayType { + default: + fallthrough + case 0: + fallthrough + case 3: + l += len(rr.GatewayName) + case 1: + l += 4 + case 2: + l += 16 + } + return l + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) +} + +type KEY struct { + DNSKEY +} + +type CDNSKEY struct { + DNSKEY +} + +type DNSKEY struct { + Hdr RR_Header + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` +} + +func (rr *DNSKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *DNSKEY) len() int { + return rr.Hdr.len() + 4 + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) +} +func (rr *DNSKEY) copy() RR { + return &DNSKEY{*rr.Hdr.copyHeader(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} +} + +func (rr *DNSKEY) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Protocol)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + rr.PublicKey +} + +type RKEY struct { + Hdr RR_Header + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` +} + +func (rr *RKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *RKEY) len() int { return rr.Hdr.len() + 4 + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) } +func (rr *RKEY) copy() RR { + return &RKEY{*rr.Hdr.copyHeader(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} +} + +func (rr *RKEY) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Protocol)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + rr.PublicKey +} + +type NSAPPTR struct { + Hdr RR_Header + Ptr string `dns:"domain-name"` +} + +func (rr *NSAPPTR) Header() *RR_Header { return &rr.Hdr } +func (rr *NSAPPTR) copy() RR { return &NSAPPTR{*rr.Hdr.copyHeader(), rr.Ptr} } +func (rr *NSAPPTR) String() string { return rr.Hdr.String() + sprintName(rr.Ptr) } +func (rr *NSAPPTR) len() int { return rr.Hdr.len() + len(rr.Ptr) } + +type NSEC3 struct { + Hdr RR_Header + Hash uint8 + Flags uint8 + Iterations uint16 + SaltLength uint8 + Salt string `dns:"size-hex"` + HashLength uint8 + NextDomain string `dns:"size-base32"` + TypeBitMap []uint16 `dns:"nsec"` +} + +func (rr *NSEC3) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC3) copy() RR { + cp := make([]uint16, len(rr.TypeBitMap), cap(rr.TypeBitMap)) + copy(cp, rr.TypeBitMap) + return &NSEC3{*rr.Hdr.copyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, cp} +} + +func (rr *NSEC3) String() string { + s := rr.Hdr.String() + s += strconv.Itoa(int(rr.Hash)) + + " " + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Iterations)) + + " " + saltToString(rr.Salt) + + " " + rr.NextDomain + for i := 0; i < len(rr.TypeBitMap); i++ { + s += " " + Type(rr.TypeBitMap[i]).String() + } + return s +} + +func (rr *NSEC3) len() int { + l := rr.Hdr.len() + 6 + len(rr.Salt)/2 + 1 + len(rr.NextDomain) + 1 + lastwindow := uint32(2 ^ 32 + 1) + for _, t := range rr.TypeBitMap { + window := t / 256 + if uint32(window) != lastwindow { + l += 1 + 32 + } + lastwindow = uint32(window) + } + return l +} + +type NSEC3PARAM struct { + Hdr RR_Header + Hash uint8 + Flags uint8 + Iterations uint16 + SaltLength uint8 + Salt string `dns:"hex"` +} + +func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC3PARAM) len() int { return rr.Hdr.len() + 2 + 4 + 1 + len(rr.Salt)/2 } +func (rr *NSEC3PARAM) copy() RR { + return &NSEC3PARAM{*rr.Hdr.copyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt} +} + +func (rr *NSEC3PARAM) String() string { + s := rr.Hdr.String() + s += strconv.Itoa(int(rr.Hash)) + + " " + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Iterations)) + + " " + saltToString(rr.Salt) + return s +} + +type TKEY struct { + Hdr RR_Header + Algorithm string `dns:"domain-name"` + Inception uint32 + Expiration uint32 + Mode uint16 + Error uint16 + KeySize uint16 + Key string + OtherLen uint16 + OtherData string +} + +func (rr *TKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *TKEY) copy() RR { + return &TKEY{*rr.Hdr.copyHeader(), rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData} +} + +func (rr *TKEY) String() string { + // It has no presentation format + return "" +} + +func (rr *TKEY) len() int { + return rr.Hdr.len() + len(rr.Algorithm) + 1 + 4 + 4 + 6 + + len(rr.Key) + 2 + len(rr.OtherData) +} + +// RFC3597 represents an unknown/generic RR. +type RFC3597 struct { + Hdr RR_Header + Rdata string `dns:"hex"` +} + +func (rr *RFC3597) Header() *RR_Header { return &rr.Hdr } +func (rr *RFC3597) copy() RR { return &RFC3597{*rr.Hdr.copyHeader(), rr.Rdata} } +func (rr *RFC3597) len() int { return rr.Hdr.len() + len(rr.Rdata)/2 + 2 } + +func (rr *RFC3597) String() string { + // Let's call it a hack + s := rfc3597Header(rr.Hdr) + + s += "\\# " + strconv.Itoa(len(rr.Rdata)/2) + " " + rr.Rdata + return s +} + +func rfc3597Header(h RR_Header) string { + var s string + + s += sprintName(h.Name) + "\t" + s += strconv.FormatInt(int64(h.Ttl), 10) + "\t" + s += "CLASS" + strconv.Itoa(int(h.Class)) + "\t" + s += "TYPE" + strconv.Itoa(int(h.Rrtype)) + "\t" + return s +} + +type URI struct { + Hdr RR_Header + Priority uint16 + Weight uint16 + Target string `dns:"octet"` +} + +func (rr *URI) Header() *RR_Header { return &rr.Hdr } +func (rr *URI) copy() RR { return &URI{*rr.Hdr.copyHeader(), rr.Weight, rr.Priority, rr.Target} } +func (rr *URI) len() int { return rr.Hdr.len() + 4 + len(rr.Target) } +func (rr *URI) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) + + " " + strconv.Itoa(int(rr.Weight)) + " " + sprintTxtOctet(rr.Target) +} + +type DHCID struct { + Hdr RR_Header + Digest string `dns:"base64"` +} + +func (rr *DHCID) Header() *RR_Header { return &rr.Hdr } +func (rr *DHCID) copy() RR { return &DHCID{*rr.Hdr.copyHeader(), rr.Digest} } +func (rr *DHCID) String() string { return rr.Hdr.String() + rr.Digest } +func (rr *DHCID) len() int { return rr.Hdr.len() + base64.StdEncoding.DecodedLen(len(rr.Digest)) } + +type TLSA struct { + Hdr RR_Header + Usage uint8 + Selector uint8 + MatchingType uint8 + Certificate string `dns:"hex"` +} + +func (rr *TLSA) Header() *RR_Header { return &rr.Hdr } +func (rr *TLSA) len() int { return rr.Hdr.len() + 3 + len(rr.Certificate)/2 } + +func (rr *TLSA) copy() RR { + return &TLSA{*rr.Hdr.copyHeader(), rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} +} + +func (rr *TLSA) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Usage)) + + " " + strconv.Itoa(int(rr.Selector)) + + " " + strconv.Itoa(int(rr.MatchingType)) + + " " + rr.Certificate +} + +type HIP struct { + Hdr RR_Header + HitLength uint8 + PublicKeyAlgorithm uint8 + PublicKeyLength uint16 + Hit string `dns:"hex"` + PublicKey string `dns:"base64"` + RendezvousServers []string `dns:"domain-name"` +} + +func (rr *HIP) Header() *RR_Header { return &rr.Hdr } +func (rr *HIP) copy() RR { + cp := make([]string, len(rr.RendezvousServers), cap(rr.RendezvousServers)) + copy(cp, rr.RendezvousServers) + return &HIP{*rr.Hdr.copyHeader(), rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, cp} +} + +func (rr *HIP) String() string { + s := rr.Hdr.String() + + strconv.Itoa(int(rr.PublicKeyAlgorithm)) + + " " + rr.Hit + + " " + rr.PublicKey + for _, d := range rr.RendezvousServers { + s += " " + sprintName(d) + } + return s +} + +func (rr *HIP) len() int { + l := rr.Hdr.len() + 4 + + len(rr.Hit)/2 + + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) + for _, d := range rr.RendezvousServers { + l += len(d) + 1 + } + return l +} + +type NINFO struct { + Hdr RR_Header + ZSData []string `dns:"txt"` +} + +func (rr *NINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *NINFO) copy() RR { + cp := make([]string, len(rr.ZSData), cap(rr.ZSData)) + copy(cp, rr.ZSData) + return &NINFO{*rr.Hdr.copyHeader(), cp} +} + +func (rr *NINFO) String() string { return rr.Hdr.String() + sprintTxt(rr.ZSData) } + +func (rr *NINFO) len() int { + l := rr.Hdr.len() + for _, t := range rr.ZSData { + l += len(t) + 1 + } + return l +} + +type WKS struct { + Hdr RR_Header + Address net.IP `dns:"a"` + Protocol uint8 + BitMap []uint16 `dns:"wks"` +} + +func (rr *WKS) Header() *RR_Header { return &rr.Hdr } +func (rr *WKS) len() int { return rr.Hdr.len() + net.IPv4len + 1 } + +func (rr *WKS) copy() RR { + cp := make([]uint16, len(rr.BitMap), cap(rr.BitMap)) + copy(cp, rr.BitMap) + return &WKS{*rr.Hdr.copyHeader(), copyIP(rr.Address), rr.Protocol, cp} +} + +func (rr *WKS) String() (s string) { + s = rr.Hdr.String() + if rr.Address != nil { + s += rr.Address.String() + } + // TODO(miek): missing protocol here, see /etc/protocols + for i := 0; i < len(rr.BitMap); i++ { + // should lookup the port + s += " " + strconv.Itoa(int(rr.BitMap[i])) + } + return s +} + +type NID struct { + Hdr RR_Header + Preference uint16 + NodeID uint64 +} + +func (rr *NID) Header() *RR_Header { return &rr.Hdr } +func (rr *NID) copy() RR { return &NID{*rr.Hdr.copyHeader(), rr.Preference, rr.NodeID} } +func (rr *NID) len() int { return rr.Hdr.len() + 2 + 8 } + +func (rr *NID) String() string { + s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + node := fmt.Sprintf("%0.16x", rr.NodeID) + s += " " + node[0:4] + ":" + node[4:8] + ":" + node[8:12] + ":" + node[12:16] + return s +} + +type L32 struct { + Hdr RR_Header + Preference uint16 + Locator32 net.IP `dns:"a"` +} + +func (rr *L32) Header() *RR_Header { return &rr.Hdr } +func (rr *L32) copy() RR { return &L32{*rr.Hdr.copyHeader(), rr.Preference, copyIP(rr.Locator32)} } +func (rr *L32) len() int { return rr.Hdr.len() + net.IPv4len } + +func (rr *L32) String() string { + if rr.Locator32 == nil { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + } + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + + " " + rr.Locator32.String() +} + +type L64 struct { + Hdr RR_Header + Preference uint16 + Locator64 uint64 +} + +func (rr *L64) Header() *RR_Header { return &rr.Hdr } +func (rr *L64) copy() RR { return &L64{*rr.Hdr.copyHeader(), rr.Preference, rr.Locator64} } +func (rr *L64) len() int { return rr.Hdr.len() + 2 + 8 } + +func (rr *L64) String() string { + s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + node := fmt.Sprintf("%0.16X", rr.Locator64) + s += " " + node[0:4] + ":" + node[4:8] + ":" + node[8:12] + ":" + node[12:16] + return s +} + +type LP struct { + Hdr RR_Header + Preference uint16 + Fqdn string `dns:"domain-name"` +} + +func (rr *LP) Header() *RR_Header { return &rr.Hdr } +func (rr *LP) copy() RR { return &LP{*rr.Hdr.copyHeader(), rr.Preference, rr.Fqdn} } +func (rr *LP) len() int { return rr.Hdr.len() + 2 + len(rr.Fqdn) + 1 } + +func (rr *LP) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Fqdn) +} + +type EUI48 struct { + Hdr RR_Header + Address uint64 `dns:"uint48"` +} + +func (rr *EUI48) Header() *RR_Header { return &rr.Hdr } +func (rr *EUI48) copy() RR { return &EUI48{*rr.Hdr.copyHeader(), rr.Address} } +func (rr *EUI48) String() string { return rr.Hdr.String() + euiToString(rr.Address, 48) } +func (rr *EUI48) len() int { return rr.Hdr.len() + 6 } + +type EUI64 struct { + Hdr RR_Header + Address uint64 +} + +func (rr *EUI64) Header() *RR_Header { return &rr.Hdr } +func (rr *EUI64) copy() RR { return &EUI64{*rr.Hdr.copyHeader(), rr.Address} } +func (rr *EUI64) String() string { return rr.Hdr.String() + euiToString(rr.Address, 64) } +func (rr *EUI64) len() int { return rr.Hdr.len() + 8 } + +type CAA struct { + Hdr RR_Header + Flag uint8 + Tag string + Value string `dns:"octet"` +} + +func (rr *CAA) Header() *RR_Header { return &rr.Hdr } +func (rr *CAA) copy() RR { return &CAA{*rr.Hdr.copyHeader(), rr.Flag, rr.Tag, rr.Value} } +func (rr *CAA) len() int { return rr.Hdr.len() + 2 + len(rr.Tag) + len(rr.Value) } +func (rr *CAA) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flag)) + " " + rr.Tag + " " + sprintTxtOctet(rr.Value) +} + +type UID struct { + Hdr RR_Header + Uid uint32 +} + +func (rr *UID) Header() *RR_Header { return &rr.Hdr } +func (rr *UID) copy() RR { return &UID{*rr.Hdr.copyHeader(), rr.Uid} } +func (rr *UID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Uid), 10) } +func (rr *UID) len() int { return rr.Hdr.len() + 4 } + +type GID struct { + Hdr RR_Header + Gid uint32 +} + +func (rr *GID) Header() *RR_Header { return &rr.Hdr } +func (rr *GID) copy() RR { return &GID{*rr.Hdr.copyHeader(), rr.Gid} } +func (rr *GID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Gid), 10) } +func (rr *GID) len() int { return rr.Hdr.len() + 4 } + +type UINFO struct { + Hdr RR_Header + Uinfo string +} + +func (rr *UINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *UINFO) copy() RR { return &UINFO{*rr.Hdr.copyHeader(), rr.Uinfo} } +func (rr *UINFO) String() string { return rr.Hdr.String() + sprintTxt([]string{rr.Uinfo}) } +func (rr *UINFO) len() int { return rr.Hdr.len() + len(rr.Uinfo) + 1 } + +type EID struct { + Hdr RR_Header + Endpoint string `dns:"hex"` +} + +func (rr *EID) Header() *RR_Header { return &rr.Hdr } +func (rr *EID) copy() RR { return &EID{*rr.Hdr.copyHeader(), rr.Endpoint} } +func (rr *EID) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Endpoint) } +func (rr *EID) len() int { return rr.Hdr.len() + len(rr.Endpoint)/2 } + +type NIMLOC struct { + Hdr RR_Header + Locator string `dns:"hex"` +} + +func (rr *NIMLOC) Header() *RR_Header { return &rr.Hdr } +func (rr *NIMLOC) copy() RR { return &NIMLOC{*rr.Hdr.copyHeader(), rr.Locator} } +func (rr *NIMLOC) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Locator) } +func (rr *NIMLOC) len() int { return rr.Hdr.len() + len(rr.Locator)/2 } + +type OPENPGPKEY struct { + Hdr RR_Header + PublicKey string `dns:"base64"` +} + +func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *OPENPGPKEY) copy() RR { return &OPENPGPKEY{*rr.Hdr.copyHeader(), rr.PublicKey} } +func (rr *OPENPGPKEY) String() string { return rr.Hdr.String() + rr.PublicKey } +func (rr *OPENPGPKEY) len() int { + return rr.Hdr.len() + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) +} + +// TimeToString translates the RRSIG's incep. and expir. times to the +// string representation used when printing the record. +// It takes serial arithmetic (RFC 1982) into account. +func TimeToString(t uint32) string { + mod := ((int64(t) - time.Now().Unix()) / year68) - 1 + if mod < 0 { + mod = 0 + } + ti := time.Unix(int64(t)-(mod*year68), 0).UTC() + return ti.Format("20060102150405") +} + +// StringToTime translates the RRSIG's incep. and expir. times from +// string values like "20110403154150" to an 32 bit integer. +// It takes serial arithmetic (RFC 1982) into account. +func StringToTime(s string) (uint32, error) { + t, e := time.Parse("20060102150405", s) + if e != nil { + return 0, e + } + mod := (t.Unix() / year68) - 1 + if mod < 0 { + mod = 0 + } + return uint32(t.Unix() - (mod * year68)), nil +} + +// saltToString converts a NSECX salt to uppercase and +// returns "-" when it is empty +func saltToString(s string) string { + if len(s) == 0 { + return "-" + } + return strings.ToUpper(s) +} + +func euiToString(eui uint64, bits int) (hex string) { + switch bits { + case 64: + hex = fmt.Sprintf("%16.16x", eui) + hex = hex[0:2] + "-" + hex[2:4] + "-" + hex[4:6] + "-" + hex[6:8] + + "-" + hex[8:10] + "-" + hex[10:12] + "-" + hex[12:14] + "-" + hex[14:16] + case 48: + hex = fmt.Sprintf("%12.12x", eui) + hex = hex[0:2] + "-" + hex[2:4] + "-" + hex[4:6] + "-" + hex[6:8] + + "-" + hex[8:10] + "-" + hex[10:12] + } + return +} + +// copyIP returns a copy of ip. +func copyIP(ip net.IP) net.IP { + p := make(net.IP, len(ip)) + copy(p, ip) + return p +} + +// Map of constructors for each RR type. +var typeToRR = map[uint16]func() RR{ + TypeA: func() RR { return new(A) }, + TypeAAAA: func() RR { return new(AAAA) }, + TypeAFSDB: func() RR { return new(AFSDB) }, + TypeCAA: func() RR { return new(CAA) }, + TypeCDS: func() RR { return new(CDS) }, + TypeCERT: func() RR { return new(CERT) }, + TypeCNAME: func() RR { return new(CNAME) }, + TypeDHCID: func() RR { return new(DHCID) }, + TypeDLV: func() RR { return new(DLV) }, + TypeDNAME: func() RR { return new(DNAME) }, + TypeKEY: func() RR { return new(KEY) }, + TypeDNSKEY: func() RR { return new(DNSKEY) }, + TypeDS: func() RR { return new(DS) }, + TypeEUI48: func() RR { return new(EUI48) }, + TypeEUI64: func() RR { return new(EUI64) }, + TypeGID: func() RR { return new(GID) }, + TypeGPOS: func() RR { return new(GPOS) }, + TypeEID: func() RR { return new(EID) }, + TypeHINFO: func() RR { return new(HINFO) }, + TypeHIP: func() RR { return new(HIP) }, + TypeIPSECKEY: func() RR { return new(IPSECKEY) }, + TypeKX: func() RR { return new(KX) }, + TypeL32: func() RR { return new(L32) }, + TypeL64: func() RR { return new(L64) }, + TypeLOC: func() RR { return new(LOC) }, + TypeLP: func() RR { return new(LP) }, + TypeMB: func() RR { return new(MB) }, + TypeMD: func() RR { return new(MD) }, + TypeMF: func() RR { return new(MF) }, + TypeMG: func() RR { return new(MG) }, + TypeMINFO: func() RR { return new(MINFO) }, + TypeMR: func() RR { return new(MR) }, + TypeMX: func() RR { return new(MX) }, + TypeNAPTR: func() RR { return new(NAPTR) }, + TypeNID: func() RR { return new(NID) }, + TypeNINFO: func() RR { return new(NINFO) }, + TypeNIMLOC: func() RR { return new(NIMLOC) }, + TypeNS: func() RR { return new(NS) }, + TypeNSAPPTR: func() RR { return new(NSAPPTR) }, + TypeNSEC3: func() RR { return new(NSEC3) }, + TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) }, + TypeNSEC: func() RR { return new(NSEC) }, + TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) }, + TypeOPT: func() RR { return new(OPT) }, + TypePTR: func() RR { return new(PTR) }, + TypeRKEY: func() RR { return new(RKEY) }, + TypeRP: func() RR { return new(RP) }, + TypePX: func() RR { return new(PX) }, + TypeSIG: func() RR { return new(SIG) }, + TypeRRSIG: func() RR { return new(RRSIG) }, + TypeRT: func() RR { return new(RT) }, + TypeSOA: func() RR { return new(SOA) }, + TypeSPF: func() RR { return new(SPF) }, + TypeSRV: func() RR { return new(SRV) }, + TypeSSHFP: func() RR { return new(SSHFP) }, + TypeTA: func() RR { return new(TA) }, + TypeTALINK: func() RR { return new(TALINK) }, + TypeTKEY: func() RR { return new(TKEY) }, + TypeTLSA: func() RR { return new(TLSA) }, + TypeTSIG: func() RR { return new(TSIG) }, + TypeTXT: func() RR { return new(TXT) }, + TypeUID: func() RR { return new(UID) }, + TypeUINFO: func() RR { return new(UINFO) }, + TypeURI: func() RR { return new(URI) }, + TypeWKS: func() RR { return new(WKS) }, + TypeX25: func() RR { return new(X25) }, +} diff --git a/vendor/github.com/miekg/dns/udp.go b/vendor/github.com/miekg/dns/udp.go new file mode 100644 index 0000000..fc86563 --- /dev/null +++ b/vendor/github.com/miekg/dns/udp.go @@ -0,0 +1,58 @@ +// +build !windows + +package dns + +import ( + "net" + "syscall" +) + +// SessionUDP holds the remote address and the associated +// out-of-band data. +type SessionUDP struct { + raddr *net.UDPAddr + context []byte +} + +// RemoteAddr returns the remote network address. +func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr } + +// setUDPSocketOptions sets the UDP socket options. +// This function is implemented on a per platform basis. See udp_*.go for more details +func setUDPSocketOptions(conn *net.UDPConn) error { + sa, err := getUDPSocketName(conn) + if err != nil { + return err + } + switch sa.(type) { + case *syscall.SockaddrInet6: + v6only, err := getUDPSocketOptions6Only(conn) + if err != nil { + return err + } + setUDPSocketOptions6(conn) + if !v6only { + setUDPSocketOptions4(conn) + } + case *syscall.SockaddrInet4: + setUDPSocketOptions4(conn) + } + return nil +} + +// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a +// net.UDPAddr. +func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) { + oob := make([]byte, 40) + n, oobn, _, raddr, err := conn.ReadMsgUDP(b, oob) + if err != nil { + return n, nil, err + } + return n, &SessionUDP{raddr, oob[:oobn]}, err +} + +// WriteToSessionUDP acts just like net.UDPConn.WritetTo(), but uses a *SessionUDP instead of a net.Addr. +func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) { + n, _, err := conn.WriteMsgUDP(b, session.context, session.raddr) + return n, err +} diff --git a/vendor/github.com/miekg/dns/udp_linux.go b/vendor/github.com/miekg/dns/udp_linux.go new file mode 100644 index 0000000..7a10785 --- /dev/null +++ b/vendor/github.com/miekg/dns/udp_linux.go @@ -0,0 +1,63 @@ +// +build linux + +package dns + +// See: +// * http://stackoverflow.com/questions/3062205/setting-the-source-ip-for-a-udp-socket and +// * http://blog.powerdns.com/2012/10/08/on-binding-datagram-udp-sockets-to-the-any-addresses/ +// +// Why do we need this: When listening on 0.0.0.0 with UDP so kernel decides what is the outgoing +// interface, this might not always be the correct one. This code will make sure the egress +// packet's interface matched the ingress' one. + +import ( + "net" + "syscall" +) + +// setUDPSocketOptions4 prepares the v4 socket for sessions. +func setUDPSocketOptions4(conn *net.UDPConn) error { + file, err := conn.File() + if err != nil { + return err + } + if err := syscall.SetsockoptInt(int(file.Fd()), syscall.IPPROTO_IP, syscall.IP_PKTINFO, 1); err != nil { + return err + } + return nil +} + +// setUDPSocketOptions6 prepares the v6 socket for sessions. +func setUDPSocketOptions6(conn *net.UDPConn) error { + file, err := conn.File() + if err != nil { + return err + } + if err := syscall.SetsockoptInt(int(file.Fd()), syscall.IPPROTO_IPV6, syscall.IPV6_RECVPKTINFO, 1); err != nil { + return err + } + return nil +} + +// getUDPSocketOption6Only return true if the socket is v6 only and false when it is v4/v6 combined +// (dualstack). +func getUDPSocketOptions6Only(conn *net.UDPConn) (bool, error) { + file, err := conn.File() + if err != nil { + return false, err + } + // dual stack. See http://stackoverflow.com/questions/1618240/how-to-support-both-ipv4-and-ipv6-connections + v6only, err := syscall.GetsockoptInt(int(file.Fd()), syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY) + if err != nil { + return false, err + } + return v6only == 1, nil +} + +func getUDPSocketName(conn *net.UDPConn) (syscall.Sockaddr, error) { + file, err := conn.File() + if err != nil { + return nil, err + } + return syscall.Getsockname(int(file.Fd())) +} diff --git a/vendor/github.com/miekg/dns/udp_other.go b/vendor/github.com/miekg/dns/udp_other.go new file mode 100644 index 0000000..c38dd3e --- /dev/null +++ b/vendor/github.com/miekg/dns/udp_other.go @@ -0,0 +1,17 @@ +// +build !linux + +package dns + +import ( + "net" + "syscall" +) + +// These do nothing. See udp_linux.go for an example of how to implement this. + +// We tried to adhire to some kind of naming scheme. + +func setUDPSocketOptions4(conn *net.UDPConn) error { return nil } +func setUDPSocketOptions6(conn *net.UDPConn) error { return nil } +func getUDPSocketOptions6Only(conn *net.UDPConn) (bool, error) { return false, nil } +func getUDPSocketName(conn *net.UDPConn) (syscall.Sockaddr, error) { return nil, nil } diff --git a/vendor/github.com/miekg/dns/udp_windows.go b/vendor/github.com/miekg/dns/udp_windows.go new file mode 100644 index 0000000..2ce4b33 --- /dev/null +++ b/vendor/github.com/miekg/dns/udp_windows.go @@ -0,0 +1,34 @@ +// +build windows + +package dns + +import "net" + +type SessionUDP struct { + raddr *net.UDPAddr +} + +// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a +// net.UDPAddr. +func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) { + n, raddr, err := conn.ReadFrom(b) + if err != nil { + return n, nil, err + } + session := &SessionUDP{raddr.(*net.UDPAddr)} + return n, session, err +} + +// WriteToSessionUDP acts just like net.UDPConn.WritetTo(), but uses a *SessionUDP instead of a net.Addr. +func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) { + n, err := conn.WriteTo(b, session.raddr) + return n, err +} + +func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr } + +// setUDPSocketOptions sets the UDP socket options. +// This function is implemented on a per platform basis. See udp_*.go for more details +func setUDPSocketOptions(conn *net.UDPConn) error { + return nil +} diff --git a/vendor/github.com/miekg/dns/update.go b/vendor/github.com/miekg/dns/update.go new file mode 100644 index 0000000..3539987 --- /dev/null +++ b/vendor/github.com/miekg/dns/update.go @@ -0,0 +1,94 @@ +package dns + +// NameUsed sets the RRs in the prereq section to +// "Name is in use" RRs. RFC 2136 section 2.4.4. +func (u *Msg) NameUsed(rr []RR) { + u.Answer = make([]RR, len(rr)) + for i, r := range rr { + u.Answer[i] = &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}} + } +} + +// NameNotUsed sets the RRs in the prereq section to +// "Name is in not use" RRs. RFC 2136 section 2.4.5. +func (u *Msg) NameNotUsed(rr []RR) { + u.Answer = make([]RR, len(rr)) + for i, r := range rr { + u.Answer[i] = &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassNONE}} + } +} + +// Used sets the RRs in the prereq section to +// "RRset exists (value dependent -- with rdata)" RRs. RFC 2136 section 2.4.2. +func (u *Msg) Used(rr []RR) { + if len(u.Question) == 0 { + panic("dns: empty question section") + } + u.Answer = make([]RR, len(rr)) + for i, r := range rr { + u.Answer[i] = r + u.Answer[i].Header().Class = u.Question[0].Qclass + } +} + +// RRsetUsed sets the RRs in the prereq section to +// "RRset exists (value independent -- no rdata)" RRs. RFC 2136 section 2.4.1. +func (u *Msg) RRsetUsed(rr []RR) { + u.Answer = make([]RR, len(rr)) + for i, r := range rr { + u.Answer[i] = r + u.Answer[i].Header().Class = ClassANY + u.Answer[i].Header().Ttl = 0 + u.Answer[i].Header().Rdlength = 0 + } +} + +// RRsetNotUsed sets the RRs in the prereq section to +// "RRset does not exist" RRs. RFC 2136 section 2.4.3. +func (u *Msg) RRsetNotUsed(rr []RR) { + u.Answer = make([]RR, len(rr)) + for i, r := range rr { + u.Answer[i] = r + u.Answer[i].Header().Class = ClassNONE + u.Answer[i].Header().Rdlength = 0 + u.Answer[i].Header().Ttl = 0 + } +} + +// Insert creates a dynamic update packet that adds an complete RRset, see RFC 2136 section 2.5.1. +func (u *Msg) Insert(rr []RR) { + if len(u.Question) == 0 { + panic("dns: empty question section") + } + u.Ns = make([]RR, len(rr)) + for i, r := range rr { + u.Ns[i] = r + u.Ns[i].Header().Class = u.Question[0].Qclass + } +} + +// RemoveRRset creates a dynamic update packet that deletes an RRset, see RFC 2136 section 2.5.2. +func (u *Msg) RemoveRRset(rr []RR) { + u.Ns = make([]RR, len(rr)) + for i, r := range rr { + u.Ns[i] = &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: r.Header().Rrtype, Class: ClassANY}} + } +} + +// RemoveName creates a dynamic update packet that deletes all RRsets of a name, see RFC 2136 section 2.5.3 +func (u *Msg) RemoveName(rr []RR) { + u.Ns = make([]RR, len(rr)) + for i, r := range rr { + u.Ns[i] = &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}} + } +} + +// Remove creates a dynamic update packet deletes RR from the RRSset, see RFC 2136 section 2.5.4 +func (u *Msg) Remove(rr []RR) { + u.Ns = make([]RR, len(rr)) + for i, r := range rr { + u.Ns[i] = r + u.Ns[i].Header().Class = ClassNONE + u.Ns[i].Header().Ttl = 0 + } +} diff --git a/vendor/github.com/miekg/dns/xfr.go b/vendor/github.com/miekg/dns/xfr.go new file mode 100644 index 0000000..7d3a67b --- /dev/null +++ b/vendor/github.com/miekg/dns/xfr.go @@ -0,0 +1,244 @@ +package dns + +import ( + "time" +) + +// Envelope is used when doing a zone transfer with a remote server. +type Envelope struct { + RR []RR // The set of RRs in the answer section of the xfr reply message. + Error error // If something went wrong, this contains the error. +} + +// A Transfer defines parameters that are used during a zone transfer. +type Transfer struct { + *Conn + DialTimeout time.Duration // net.DialTimeout, defaults to 2 seconds + ReadTimeout time.Duration // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds + WriteTimeout time.Duration // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds + TsigSecret map[string]string // Secret(s) for Tsig map[<zonename>]<base64 secret>, zonename must be fully qualified + tsigTimersOnly bool +} + +// Think we need to away to stop the transfer + +// In performs an incoming transfer with the server in a. +// If you would like to set the source IP, or some other attribute +// of a Dialer for a Transfer, you can do so by specifying the attributes +// in the Transfer.Conn: +// +// d := net.Dialer{LocalAddr: transfer_source} +// con, err := d.Dial("tcp", master) +// dnscon := &dns.Conn{Conn:con} +// transfer = &dns.Transfer{Conn: dnscon} +// channel, err := transfer.In(message, master) +// +func (t *Transfer) In(q *Msg, a string) (env chan *Envelope, err error) { + timeout := dnsTimeout + if t.DialTimeout != 0 { + timeout = t.DialTimeout + } + if t.Conn == nil { + t.Conn, err = DialTimeout("tcp", a, timeout) + if err != nil { + return nil, err + } + } + if err := t.WriteMsg(q); err != nil { + return nil, err + } + env = make(chan *Envelope) + go func() { + if q.Question[0].Qtype == TypeAXFR { + go t.inAxfr(q.Id, env) + return + } + if q.Question[0].Qtype == TypeIXFR { + go t.inIxfr(q.Id, env) + return + } + }() + return env, nil +} + +func (t *Transfer) inAxfr(id uint16, c chan *Envelope) { + first := true + defer t.Close() + defer close(c) + timeout := dnsTimeout + if t.ReadTimeout != 0 { + timeout = t.ReadTimeout + } + for { + t.Conn.SetReadDeadline(time.Now().Add(timeout)) + in, err := t.ReadMsg() + if err != nil { + c <- &Envelope{nil, err} + return + } + if id != in.Id { + c <- &Envelope{in.Answer, ErrId} + return + } + if first { + if !isSOAFirst(in) { + c <- &Envelope{in.Answer, ErrSoa} + return + } + first = !first + // only one answer that is SOA, receive more + if len(in.Answer) == 1 { + t.tsigTimersOnly = true + c <- &Envelope{in.Answer, nil} + continue + } + } + + if !first { + t.tsigTimersOnly = true // Subsequent envelopes use this. + if isSOALast(in) { + c <- &Envelope{in.Answer, nil} + return + } + c <- &Envelope{in.Answer, nil} + } + } +} + +func (t *Transfer) inIxfr(id uint16, c chan *Envelope) { + serial := uint32(0) // The first serial seen is the current server serial + first := true + defer t.Close() + defer close(c) + timeout := dnsTimeout + if t.ReadTimeout != 0 { + timeout = t.ReadTimeout + } + for { + t.SetReadDeadline(time.Now().Add(timeout)) + in, err := t.ReadMsg() + if err != nil { + c <- &Envelope{nil, err} + return + } + if id != in.Id { + c <- &Envelope{in.Answer, ErrId} + return + } + if first { + // A single SOA RR signals "no changes" + if len(in.Answer) == 1 && isSOAFirst(in) { + c <- &Envelope{in.Answer, nil} + return + } + + // Check if the returned answer is ok + if !isSOAFirst(in) { + c <- &Envelope{in.Answer, ErrSoa} + return + } + // This serial is important + serial = in.Answer[0].(*SOA).Serial + first = !first + } + + // Now we need to check each message for SOA records, to see what we need to do + if !first { + t.tsigTimersOnly = true + // If the last record in the IXFR contains the servers' SOA, we should quit + if v, ok := in.Answer[len(in.Answer)-1].(*SOA); ok { + if v.Serial == serial { + c <- &Envelope{in.Answer, nil} + return + } + } + c <- &Envelope{in.Answer, nil} + } + } +} + +// Out performs an outgoing transfer with the client connecting in w. +// Basic use pattern: +// +// ch := make(chan *dns.Envelope) +// tr := new(dns.Transfer) +// tr.Out(w, r, ch) +// c <- &dns.Envelope{RR: []dns.RR{soa, rr1, rr2, rr3, soa}} +// close(ch) +// w.Hijack() +// // w.Close() // Client closes connection +// +// The server is responsible for sending the correct sequence of RRs through the +// channel ch. +func (t *Transfer) Out(w ResponseWriter, q *Msg, ch chan *Envelope) error { + for x := range ch { + r := new(Msg) + // Compress? + r.SetReply(q) + r.Authoritative = true + // assume it fits TODO(miek): fix + r.Answer = append(r.Answer, x.RR...) + if err := w.WriteMsg(r); err != nil { + return err + } + } + w.TsigTimersOnly(true) + return nil +} + +// ReadMsg reads a message from the transfer connection t. +func (t *Transfer) ReadMsg() (*Msg, error) { + m := new(Msg) + p := make([]byte, MaxMsgSize) + n, err := t.Read(p) + if err != nil && n == 0 { + return nil, err + } + p = p[:n] + if err := m.Unpack(p); err != nil { + return nil, err + } + if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { + if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { + return m, ErrSecret + } + // Need to work on the original message p, as that was used to calculate the tsig. + err = TsigVerify(p, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + t.tsigRequestMAC = ts.MAC + } + return m, err +} + +// WriteMsg writes a message through the transfer connection t. +func (t *Transfer) WriteMsg(m *Msg) (err error) { + var out []byte + if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { + if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { + return ErrSecret + } + out, t.tsigRequestMAC, err = TsigGenerate(m, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + } else { + out, err = m.Pack() + } + if err != nil { + return err + } + if _, err = t.Write(out); err != nil { + return err + } + return nil +} + +func isSOAFirst(in *Msg) bool { + if len(in.Answer) > 0 { + return in.Answer[0].Header().Rrtype == TypeSOA + } + return false +} + +func isSOALast(in *Msg) bool { + if len(in.Answer) > 0 { + return in.Answer[len(in.Answer)-1].Header().Rrtype == TypeSOA + } + return false +} diff --git a/vendor/github.com/miekg/dns/zgenerate.go b/vendor/github.com/miekg/dns/zgenerate.go new file mode 100644 index 0000000..c506e96 --- /dev/null +++ b/vendor/github.com/miekg/dns/zgenerate.go @@ -0,0 +1,158 @@ +package dns + +import ( + "bytes" + "fmt" + "strconv" + "strings" +) + +// Parse the $GENERATE statement as used in BIND9 zones. +// See http://www.zytrax.com/books/dns/ch8/generate.html for instance. +// We are called after '$GENERATE '. After which we expect: +// * the range (12-24/2) +// * lhs (ownername) +// * [[ttl][class]] +// * type +// * rhs (rdata) +// But we are lazy here, only the range is parsed *all* occurences +// of $ after that are interpreted. +// Any error are returned as a string value, the empty string signals +// "no error". +func generate(l lex, c chan lex, t chan *Token, o string) string { + step := 1 + if i := strings.IndexAny(l.token, "/"); i != -1 { + if i+1 == len(l.token) { + return "bad step in $GENERATE range" + } + if s, e := strconv.Atoi(l.token[i+1:]); e == nil { + if s < 0 { + return "bad step in $GENERATE range" + } + step = s + } else { + return "bad step in $GENERATE range" + } + l.token = l.token[:i] + } + sx := strings.SplitN(l.token, "-", 2) + if len(sx) != 2 { + return "bad start-stop in $GENERATE range" + } + start, err := strconv.Atoi(sx[0]) + if err != nil { + return "bad start in $GENERATE range" + } + end, err := strconv.Atoi(sx[1]) + if err != nil { + return "bad stop in $GENERATE range" + } + if end < 0 || start < 0 || end < start { + return "bad range in $GENERATE range" + } + + <-c // _BLANK + // Create a complete new string, which we then parse again. + s := "" +BuildRR: + l = <-c + if l.value != zNewline && l.value != zEOF { + s += l.token + goto BuildRR + } + for i := start; i <= end; i += step { + var ( + escape bool + dom bytes.Buffer + mod string + err string + offset int + ) + + for j := 0; j < len(s); j++ { // No 'range' because we need to jump around + switch s[j] { + case '\\': + if escape { + dom.WriteByte('\\') + escape = false + continue + } + escape = true + case '$': + mod = "%d" + offset = 0 + if escape { + dom.WriteByte('$') + escape = false + continue + } + escape = false + if j+1 >= len(s) { // End of the string + dom.WriteString(fmt.Sprintf(mod, i+offset)) + continue + } else { + if s[j+1] == '$' { + dom.WriteByte('$') + j++ + continue + } + } + // Search for { and } + if s[j+1] == '{' { // Modifier block + sep := strings.Index(s[j+2:], "}") + if sep == -1 { + return "bad modifier in $GENERATE" + } + mod, offset, err = modToPrintf(s[j+2 : j+2+sep]) + if err != "" { + return err + } + j += 2 + sep // Jump to it + } + dom.WriteString(fmt.Sprintf(mod, i+offset)) + default: + if escape { // Pretty useless here + escape = false + continue + } + dom.WriteByte(s[j]) + } + } + // Re-parse the RR and send it on the current channel t + rx, e := NewRR("$ORIGIN " + o + "\n" + dom.String()) + if e != nil { + return e.(*ParseError).err + } + t <- &Token{RR: rx} + // Its more efficient to first built the rrlist and then parse it in + // one go! But is this a problem? + } + return "" +} + +// Convert a $GENERATE modifier 0,0,d to something Printf can deal with. +func modToPrintf(s string) (string, int, string) { + xs := strings.SplitN(s, ",", 3) + if len(xs) != 3 { + return "", 0, "bad modifier in $GENERATE" + } + // xs[0] is offset, xs[1] is width, xs[2] is base + if xs[2] != "o" && xs[2] != "d" && xs[2] != "x" && xs[2] != "X" { + return "", 0, "bad base in $GENERATE" + } + offset, err := strconv.Atoi(xs[0]) + if err != nil || offset > 255 { + return "", 0, "bad offset in $GENERATE" + } + width, err := strconv.Atoi(xs[1]) + if err != nil || width > 255 { + return "", offset, "bad width in $GENERATE" + } + switch { + case width < 0: + return "", offset, "bad width in $GENERATE" + case width == 0: + return "%" + xs[1] + xs[2], offset, "" + } + return "%0" + xs[1] + xs[2], offset, "" +} diff --git a/vendor/github.com/miekg/dns/zscan.go b/vendor/github.com/miekg/dns/zscan.go new file mode 100644 index 0000000..40ba35c --- /dev/null +++ b/vendor/github.com/miekg/dns/zscan.go @@ -0,0 +1,972 @@ +package dns + +import ( + "io" + "log" + "os" + "strconv" + "strings" +) + +type debugging bool + +const debug debugging = false + +func (d debugging) Printf(format string, args ...interface{}) { + if d { + log.Printf(format, args...) + } +} + +const maxTok = 2048 // Largest token we can return. +const maxUint16 = 1<<16 - 1 + +// Tokinize a RFC 1035 zone file. The tokenizer will normalize it: +// * Add ownernames if they are left blank; +// * Suppress sequences of spaces; +// * Make each RR fit on one line (_NEWLINE is send as last) +// * Handle comments: ; +// * Handle braces - anywhere. +const ( + // Zonefile + zEOF = iota + zString + zBlank + zQuote + zNewline + zRrtpe + zOwner + zClass + zDirOrigin // $ORIGIN + zDirTtl // $TTL + zDirInclude // $INCLUDE + zDirGenerate // $GENERATE + + // Privatekey file + zValue + zKey + + zExpectOwnerDir // Ownername + zExpectOwnerBl // Whitespace after the ownername + zExpectAny // Expect rrtype, ttl or class + zExpectAnyNoClass // Expect rrtype or ttl + zExpectAnyNoClassBl // The whitespace after _EXPECT_ANY_NOCLASS + zExpectAnyNoTtl // Expect rrtype or class + zExpectAnyNoTtlBl // Whitespace after _EXPECT_ANY_NOTTL + zExpectRrtype // Expect rrtype + zExpectRrtypeBl // Whitespace BEFORE rrtype + zExpectRdata // The first element of the rdata + zExpectDirTtlBl // Space after directive $TTL + zExpectDirTtl // Directive $TTL + zExpectDirOriginBl // Space after directive $ORIGIN + zExpectDirOrigin // Directive $ORIGIN + zExpectDirIncludeBl // Space after directive $INCLUDE + zExpectDirInclude // Directive $INCLUDE + zExpectDirGenerate // Directive $GENERATE + zExpectDirGenerateBl // Space after directive $GENERATE +) + +// ParseError is a parsing error. It contains the parse error and the location in the io.Reader +// where the error occured. +type ParseError struct { + file string + err string + lex lex +} + +func (e *ParseError) Error() (s string) { + if e.file != "" { + s = e.file + ": " + } + s += "dns: " + e.err + ": " + strconv.QuoteToASCII(e.lex.token) + " at line: " + + strconv.Itoa(e.lex.line) + ":" + strconv.Itoa(e.lex.column) + return +} + +type lex struct { + token string // text of the token + tokenUpper string // uppercase text of the token + length int // lenght of the token + err bool // when true, token text has lexer error + value uint8 // value: zString, _BLANK, etc. + line int // line in the file + column int // column in the file + torc uint16 // type or class as parsed in the lexer, we only need to look this up in the grammar + comment string // any comment text seen +} + +// Token holds the token that are returned when a zone file is parsed. +type Token struct { + // The scanned resource record when error is not nil. + RR + // When an error occured, this has the error specifics. + Error *ParseError + // A potential comment positioned after the RR and on the same line. + Comment string +} + +// NewRR reads the RR contained in the string s. Only the first RR is +// returned. If s contains no RR, return nil with no error. The class +// defaults to IN and TTL defaults to 3600. The full zone file syntax +// like $TTL, $ORIGIN, etc. is supported. All fields of the returned +// RR are set, except RR.Header().Rdlength which is set to 0. +func NewRR(s string) (RR, error) { + if len(s) > 0 && s[len(s)-1] != '\n' { // We need a closing newline + return ReadRR(strings.NewReader(s+"\n"), "") + } + return ReadRR(strings.NewReader(s), "") +} + +// ReadRR reads the RR contained in q. +// See NewRR for more documentation. +func ReadRR(q io.Reader, filename string) (RR, error) { + r := <-parseZoneHelper(q, ".", filename, 1) + if r == nil { + return nil, nil + } + + if r.Error != nil { + return nil, r.Error + } + return r.RR, nil +} + +// ParseZone reads a RFC 1035 style zonefile from r. It returns *Tokens on the +// returned channel, which consist out the parsed RR, a potential comment or an error. +// If there is an error the RR is nil. The string file is only used +// in error reporting. The string origin is used as the initial origin, as +// if the file would start with: $ORIGIN origin . +// The directives $INCLUDE, $ORIGIN, $TTL and $GENERATE are supported. +// The channel t is closed by ParseZone when the end of r is reached. +// +// Basic usage pattern when reading from a string (z) containing the +// zone data: +// +// for x := range dns.ParseZone(strings.NewReader(z), "", "") { +// if x.Error != nil { +// // Do something with x.RR +// } +// } +// +// Comments specified after an RR (and on the same line!) are returned too: +// +// foo. IN A 10.0.0.1 ; this is a comment +// +// The text "; this is comment" is returned in Token.Comment. Comments inside the +// RR are discarded. Comments on a line by themselves are discarded too. +func ParseZone(r io.Reader, origin, file string) chan *Token { + return parseZoneHelper(r, origin, file, 10000) +} + +func parseZoneHelper(r io.Reader, origin, file string, chansize int) chan *Token { + t := make(chan *Token, chansize) + go parseZone(r, origin, file, t, 0) + return t +} + +func parseZone(r io.Reader, origin, f string, t chan *Token, include int) { + defer func() { + if include == 0 { + close(t) + } + }() + s := scanInit(r) + c := make(chan lex) + // Start the lexer + go zlexer(s, c) + // 6 possible beginnings of a line, _ is a space + // 0. zRRTYPE -> all omitted until the rrtype + // 1. zOwner _ zRrtype -> class/ttl omitted + // 2. zOwner _ zString _ zRrtype -> class omitted + // 3. zOwner _ zString _ zClass _ zRrtype -> ttl/class + // 4. zOwner _ zClass _ zRrtype -> ttl omitted + // 5. zOwner _ zClass _ zString _ zRrtype -> class/ttl (reversed) + // After detecting these, we know the zRrtype so we can jump to functions + // handling the rdata for each of these types. + + if origin == "" { + origin = "." + } + origin = Fqdn(origin) + if _, ok := IsDomainName(origin); !ok { + t <- &Token{Error: &ParseError{f, "bad initial origin name", lex{}}} + return + } + + st := zExpectOwnerDir // initial state + var h RR_Header + var defttl uint32 = defaultTtl + var prevName string + for l := range c { + // Lexer spotted an error already + if l.err == true { + t <- &Token{Error: &ParseError{f, l.token, l}} + return + + } + switch st { + case zExpectOwnerDir: + // We can also expect a directive, like $TTL or $ORIGIN + h.Ttl = defttl + h.Class = ClassINET + switch l.value { + case zNewline: + st = zExpectOwnerDir + case zOwner: + h.Name = l.token + if l.token[0] == '@' { + h.Name = origin + prevName = h.Name + st = zExpectOwnerBl + break + } + if h.Name[l.length-1] != '.' { + h.Name = appendOrigin(h.Name, origin) + } + _, ok := IsDomainName(l.token) + if !ok { + t <- &Token{Error: &ParseError{f, "bad owner name", l}} + return + } + prevName = h.Name + st = zExpectOwnerBl + case zDirTtl: + st = zExpectDirTtlBl + case zDirOrigin: + st = zExpectDirOriginBl + case zDirInclude: + st = zExpectDirIncludeBl + case zDirGenerate: + st = zExpectDirGenerateBl + case zRrtpe: + h.Name = prevName + h.Rrtype = l.torc + st = zExpectRdata + case zClass: + h.Name = prevName + h.Class = l.torc + st = zExpectAnyNoClassBl + case zBlank: + // Discard, can happen when there is nothing on the + // line except the RR type + case zString: + ttl, ok := stringToTtl(l.token) + if !ok { + t <- &Token{Error: &ParseError{f, "not a TTL", l}} + return + } + h.Ttl = ttl + // Don't about the defttl, we should take the $TTL value + // defttl = ttl + st = zExpectAnyNoTtlBl + + default: + t <- &Token{Error: &ParseError{f, "syntax error at beginning", l}} + return + } + case zExpectDirIncludeBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank after $INCLUDE-directive", l}} + return + } + st = zExpectDirInclude + case zExpectDirInclude: + if l.value != zString { + t <- &Token{Error: &ParseError{f, "expecting $INCLUDE value, not this...", l}} + return + } + neworigin := origin // There may be optionally a new origin set after the filename, if not use current one + l := <-c + switch l.value { + case zBlank: + l := <-c + if l.value == zString { + if _, ok := IsDomainName(l.token); !ok || l.length == 0 || l.err { + t <- &Token{Error: &ParseError{f, "bad origin name", l}} + return + } + // a new origin is specified. + if l.token[l.length-1] != '.' { + if origin != "." { // Prevent .. endings + neworigin = l.token + "." + origin + } else { + neworigin = l.token + origin + } + } else { + neworigin = l.token + } + } + case zNewline, zEOF: + // Ok + default: + t <- &Token{Error: &ParseError{f, "garbage after $INCLUDE", l}} + return + } + // Start with the new file + r1, e1 := os.Open(l.token) + if e1 != nil { + t <- &Token{Error: &ParseError{f, "failed to open `" + l.token + "'", l}} + return + } + if include+1 > 7 { + t <- &Token{Error: &ParseError{f, "too deeply nested $INCLUDE", l}} + return + } + parseZone(r1, l.token, neworigin, t, include+1) + st = zExpectOwnerDir + case zExpectDirTtlBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank after $TTL-directive", l}} + return + } + st = zExpectDirTtl + case zExpectDirTtl: + if l.value != zString { + t <- &Token{Error: &ParseError{f, "expecting $TTL value, not this...", l}} + return + } + if e, _ := slurpRemainder(c, f); e != nil { + t <- &Token{Error: e} + return + } + ttl, ok := stringToTtl(l.token) + if !ok { + t <- &Token{Error: &ParseError{f, "expecting $TTL value, not this...", l}} + return + } + defttl = ttl + st = zExpectOwnerDir + case zExpectDirOriginBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank after $ORIGIN-directive", l}} + return + } + st = zExpectDirOrigin + case zExpectDirOrigin: + if l.value != zString { + t <- &Token{Error: &ParseError{f, "expecting $ORIGIN value, not this...", l}} + return + } + if e, _ := slurpRemainder(c, f); e != nil { + t <- &Token{Error: e} + } + if _, ok := IsDomainName(l.token); !ok { + t <- &Token{Error: &ParseError{f, "bad origin name", l}} + return + } + if l.token[l.length-1] != '.' { + if origin != "." { // Prevent .. endings + origin = l.token + "." + origin + } else { + origin = l.token + origin + } + } else { + origin = l.token + } + st = zExpectOwnerDir + case zExpectDirGenerateBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank after $GENERATE-directive", l}} + return + } + st = zExpectDirGenerate + case zExpectDirGenerate: + if l.value != zString { + t <- &Token{Error: &ParseError{f, "expecting $GENERATE value, not this...", l}} + return + } + if e := generate(l, c, t, origin); e != "" { + t <- &Token{Error: &ParseError{f, e, l}} + return + } + st = zExpectOwnerDir + case zExpectOwnerBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank after owner", l}} + return + } + st = zExpectAny + case zExpectAny: + switch l.value { + case zRrtpe: + h.Rrtype = l.torc + st = zExpectRdata + case zClass: + h.Class = l.torc + st = zExpectAnyNoClassBl + case zString: + ttl, ok := stringToTtl(l.token) + if !ok { + t <- &Token{Error: &ParseError{f, "not a TTL", l}} + return + } + h.Ttl = ttl + // defttl = ttl // don't set the defttl here + st = zExpectAnyNoTtlBl + default: + t <- &Token{Error: &ParseError{f, "expecting RR type, TTL or class, not this...", l}} + return + } + case zExpectAnyNoClassBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank before class", l}} + return + } + st = zExpectAnyNoClass + case zExpectAnyNoTtlBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank before TTL", l}} + return + } + st = zExpectAnyNoTtl + case zExpectAnyNoTtl: + switch l.value { + case zClass: + h.Class = l.torc + st = zExpectRrtypeBl + case zRrtpe: + h.Rrtype = l.torc + st = zExpectRdata + default: + t <- &Token{Error: &ParseError{f, "expecting RR type or class, not this...", l}} + return + } + case zExpectAnyNoClass: + switch l.value { + case zString: + ttl, ok := stringToTtl(l.token) + if !ok { + t <- &Token{Error: &ParseError{f, "not a TTL", l}} + return + } + h.Ttl = ttl + // defttl = ttl // don't set the def ttl anymore + st = zExpectRrtypeBl + case zRrtpe: + h.Rrtype = l.torc + st = zExpectRdata + default: + t <- &Token{Error: &ParseError{f, "expecting RR type or TTL, not this...", l}} + return + } + case zExpectRrtypeBl: + if l.value != zBlank { + t <- &Token{Error: &ParseError{f, "no blank before RR type", l}} + return + } + st = zExpectRrtype + case zExpectRrtype: + if l.value != zRrtpe { + t <- &Token{Error: &ParseError{f, "unknown RR type", l}} + return + } + h.Rrtype = l.torc + st = zExpectRdata + case zExpectRdata: + r, e, c1 := setRR(h, c, origin, f) + if e != nil { + // If e.lex is nil than we have encounter a unknown RR type + // in that case we substitute our current lex token + if e.lex.token == "" && e.lex.value == 0 { + e.lex = l // Uh, dirty + } + t <- &Token{Error: e} + return + } + t <- &Token{RR: r, Comment: c1} + st = zExpectOwnerDir + } + } + // If we get here, we and the h.Rrtype is still zero, we haven't parsed anything, this + // is not an error, because an empty zone file is still a zone file. +} + +// zlexer scans the sourcefile and returns tokens on the channel c. +func zlexer(s *scan, c chan lex) { + var l lex + str := make([]byte, maxTok) // Should be enough for any token + stri := 0 // Offset in str (0 means empty) + com := make([]byte, maxTok) // Hold comment text + comi := 0 + quote := false + escape := false + space := false + commt := false + rrtype := false + owner := true + brace := 0 + x, err := s.tokenText() + defer close(c) + for err == nil { + l.column = s.position.Column + l.line = s.position.Line + if stri >= maxTok { + l.token = "token length insufficient for parsing" + l.err = true + debug.Printf("[%+v]", l.token) + c <- l + return + } + if comi >= maxTok { + l.token = "comment length insufficient for parsing" + l.err = true + debug.Printf("[%+v]", l.token) + c <- l + return + } + + switch x { + case ' ', '\t': + if escape { + escape = false + str[stri] = x + stri++ + break + } + if quote { + // Inside quotes this is legal + str[stri] = x + stri++ + break + } + if commt { + com[comi] = x + comi++ + break + } + if stri == 0 { + // Space directly in the beginning, handled in the grammar + } else if owner { + // If we have a string and its the first, make it an owner + l.value = zOwner + l.token = string(str[:stri]) + l.tokenUpper = strings.ToUpper(l.token) + l.length = stri + // escape $... start with a \ not a $, so this will work + switch l.tokenUpper { + case "$TTL": + l.value = zDirTtl + case "$ORIGIN": + l.value = zDirOrigin + case "$INCLUDE": + l.value = zDirInclude + case "$GENERATE": + l.value = zDirGenerate + } + debug.Printf("[7 %+v]", l.token) + c <- l + } else { + l.value = zString + l.token = string(str[:stri]) + l.tokenUpper = strings.ToUpper(l.token) + l.length = stri + if !rrtype { + if t, ok := StringToType[l.tokenUpper]; ok { + l.value = zRrtpe + l.torc = t + rrtype = true + } else { + if strings.HasPrefix(l.tokenUpper, "TYPE") { + t, ok := typeToInt(l.token) + if !ok { + l.token = "unknown RR type" + l.err = true + c <- l + return + } + l.value = zRrtpe + l.torc = t + } + } + if t, ok := StringToClass[l.tokenUpper]; ok { + l.value = zClass + l.torc = t + } else { + if strings.HasPrefix(l.tokenUpper, "CLASS") { + t, ok := classToInt(l.token) + if !ok { + l.token = "unknown class" + l.err = true + c <- l + return + } + l.value = zClass + l.torc = t + } + } + } + debug.Printf("[6 %+v]", l.token) + c <- l + } + stri = 0 + // I reverse space stuff here + if !space && !commt { + l.value = zBlank + l.token = " " + l.length = 1 + debug.Printf("[5 %+v]", l.token) + c <- l + } + owner = false + space = true + case ';': + if escape { + escape = false + str[stri] = x + stri++ + break + } + if quote { + // Inside quotes this is legal + str[stri] = x + stri++ + break + } + if stri > 0 { + l.value = zString + l.token = string(str[:stri]) + l.length = stri + debug.Printf("[4 %+v]", l.token) + c <- l + stri = 0 + } + commt = true + com[comi] = ';' + comi++ + case '\r': + escape = false + if quote { + str[stri] = x + stri++ + break + } + // discard if outside of quotes + case '\n': + escape = false + // Escaped newline + if quote { + str[stri] = x + stri++ + break + } + // inside quotes this is legal + if commt { + // Reset a comment + commt = false + rrtype = false + stri = 0 + // If not in a brace this ends the comment AND the RR + if brace == 0 { + owner = true + owner = true + l.value = zNewline + l.token = "\n" + l.length = 1 + l.comment = string(com[:comi]) + debug.Printf("[3 %+v %+v]", l.token, l.comment) + c <- l + l.comment = "" + comi = 0 + break + } + com[comi] = ' ' // convert newline to space + comi++ + break + } + + if brace == 0 { + // If there is previous text, we should output it here + if stri != 0 { + l.value = zString + l.token = string(str[:stri]) + l.tokenUpper = strings.ToUpper(l.token) + + l.length = stri + if !rrtype { + if t, ok := StringToType[l.tokenUpper]; ok { + l.value = zRrtpe + l.torc = t + rrtype = true + } + } + debug.Printf("[2 %+v]", l.token) + c <- l + } + l.value = zNewline + l.token = "\n" + l.length = 1 + debug.Printf("[1 %+v]", l.token) + c <- l + stri = 0 + commt = false + rrtype = false + owner = true + comi = 0 + } + case '\\': + // comments do not get escaped chars, everything is copied + if commt { + com[comi] = x + comi++ + break + } + // something already escaped must be in string + if escape { + str[stri] = x + stri++ + escape = false + break + } + // something escaped outside of string gets added to string + str[stri] = x + stri++ + escape = true + case '"': + if commt { + com[comi] = x + comi++ + break + } + if escape { + str[stri] = x + stri++ + escape = false + break + } + space = false + // send previous gathered text and the quote + if stri != 0 { + l.value = zString + l.token = string(str[:stri]) + l.length = stri + + debug.Printf("[%+v]", l.token) + c <- l + stri = 0 + } + + // send quote itself as separate token + l.value = zQuote + l.token = "\"" + l.length = 1 + c <- l + quote = !quote + case '(', ')': + if commt { + com[comi] = x + comi++ + break + } + if escape { + str[stri] = x + stri++ + escape = false + break + } + if quote { + str[stri] = x + stri++ + break + } + switch x { + case ')': + brace-- + if brace < 0 { + l.token = "extra closing brace" + l.err = true + debug.Printf("[%+v]", l.token) + c <- l + return + } + case '(': + brace++ + } + default: + escape = false + if commt { + com[comi] = x + comi++ + break + } + str[stri] = x + stri++ + space = false + } + x, err = s.tokenText() + } + if stri > 0 { + // Send remainder + l.token = string(str[:stri]) + l.length = stri + l.value = zString + debug.Printf("[%+v]", l.token) + c <- l + } +} + +// Extract the class number from CLASSxx +func classToInt(token string) (uint16, bool) { + offset := 5 + if len(token) < offset+1 { + return 0, false + } + class, ok := strconv.Atoi(token[offset:]) + if ok != nil || class > maxUint16 { + return 0, false + } + return uint16(class), true +} + +// Extract the rr number from TYPExxx +func typeToInt(token string) (uint16, bool) { + offset := 4 + if len(token) < offset+1 { + return 0, false + } + typ, ok := strconv.Atoi(token[offset:]) + if ok != nil || typ > maxUint16 { + return 0, false + } + return uint16(typ), true +} + +// Parse things like 2w, 2m, etc, Return the time in seconds. +func stringToTtl(token string) (uint32, bool) { + s := uint32(0) + i := uint32(0) + for _, c := range token { + switch c { + case 's', 'S': + s += i + i = 0 + case 'm', 'M': + s += i * 60 + i = 0 + case 'h', 'H': + s += i * 60 * 60 + i = 0 + case 'd', 'D': + s += i * 60 * 60 * 24 + i = 0 + case 'w', 'W': + s += i * 60 * 60 * 24 * 7 + i = 0 + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + i *= 10 + i += uint32(c) - '0' + default: + return 0, false + } + } + return s + i, true +} + +// Parse LOC records' <digits>[.<digits>][mM] into a +// mantissa exponent format. Token should contain the entire +// string (i.e. no spaces allowed) +func stringToCm(token string) (e, m uint8, ok bool) { + if token[len(token)-1] == 'M' || token[len(token)-1] == 'm' { + token = token[0 : len(token)-1] + } + s := strings.SplitN(token, ".", 2) + var meters, cmeters, val int + var err error + switch len(s) { + case 2: + if cmeters, err = strconv.Atoi(s[1]); err != nil { + return + } + fallthrough + case 1: + if meters, err = strconv.Atoi(s[0]); err != nil { + return + } + case 0: + // huh? + return 0, 0, false + } + ok = true + if meters > 0 { + e = 2 + val = meters + } else { + e = 0 + val = cmeters + } + for val > 10 { + e++ + val /= 10 + } + if e > 9 { + ok = false + } + m = uint8(val) + return +} + +func appendOrigin(name, origin string) string { + if origin == "." { + return name + origin + } + return name + "." + origin +} + +// LOC record helper function +func locCheckNorth(token string, latitude uint32) (uint32, bool) { + switch token { + case "n", "N": + return LOC_EQUATOR + latitude, true + case "s", "S": + return LOC_EQUATOR - latitude, true + } + return latitude, false +} + +// LOC record helper function +func locCheckEast(token string, longitude uint32) (uint32, bool) { + switch token { + case "e", "E": + return LOC_EQUATOR + longitude, true + case "w", "W": + return LOC_EQUATOR - longitude, true + } + return longitude, false +} + +// "Eat" the rest of the "line". Return potential comments +func slurpRemainder(c chan lex, f string) (*ParseError, string) { + l := <-c + com := "" + switch l.value { + case zBlank: + l = <-c + com = l.comment + if l.value != zNewline && l.value != zEOF { + return &ParseError{f, "garbage after rdata", l}, "" + } + case zNewline: + com = l.comment + case zEOF: + default: + return &ParseError{f, "garbage after rdata", l}, "" + } + return nil, com +} + +// Parse a 64 bit-like ipv6 address: "0014:4fff:ff20:ee64" +// Used for NID and L64 record. +func stringToNodeID(l lex) (uint64, *ParseError) { + if len(l.token) < 19 { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + // There must be three colons at fixes postitions, if not its a parse error + if l.token[4] != ':' && l.token[9] != ':' && l.token[14] != ':' { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + s := l.token[0:4] + l.token[5:9] + l.token[10:14] + l.token[15:19] + u, e := strconv.ParseUint(s, 16, 64) + if e != nil { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + return u, nil +} diff --git a/vendor/github.com/miekg/dns/zscan_rr.go b/vendor/github.com/miekg/dns/zscan_rr.go new file mode 100644 index 0000000..a2db008 --- /dev/null +++ b/vendor/github.com/miekg/dns/zscan_rr.go @@ -0,0 +1,2270 @@ +package dns + +import ( + "encoding/base64" + "net" + "strconv" + "strings" +) + +type parserFunc struct { + // Func defines the function that parses the tokens and returns the RR + // or an error. The last string contains any comments in the line as + // they returned by the lexer as well. + Func func(h RR_Header, c chan lex, origin string, file string) (RR, *ParseError, string) + // Signals if the RR ending is of variable length, like TXT or records + // that have Hexadecimal or Base64 as their last element in the Rdata. Records + // that have a fixed ending or for instance A, AAAA, SOA and etc. + Variable bool +} + +// Parse the rdata of each rrtype. +// All data from the channel c is either zString or zBlank. +// After the rdata there may come a zBlank and then a zNewline +// or immediately a zNewline. If this is not the case we flag +// an *ParseError: garbage after rdata. +func setRR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + parserfunc, ok := typeToparserFunc[h.Rrtype] + if ok { + r, e, cm := parserfunc.Func(h, c, o, f) + if parserfunc.Variable { + return r, e, cm + } + if e != nil { + return nil, e, "" + } + e, cm = slurpRemainder(c, f) + if e != nil { + return nil, e, "" + } + return r, nil, cm + } + // RFC3957 RR (Unknown RR handling) + return setRFC3597(h, c, o, f) +} + +// A remainder of the rdata with embedded spaces, return the parsed string (sans the spaces) +// or an error +func endingToString(c chan lex, errstr, f string) (string, *ParseError, string) { + s := "" + l := <-c // zString + for l.value != zNewline && l.value != zEOF { + if l.err { + return s, &ParseError{f, errstr, l}, "" + } + switch l.value { + case zString: + s += l.token + case zBlank: // Ok + default: + return "", &ParseError{f, errstr, l}, "" + } + l = <-c + } + return s, nil, l.comment +} + +// A remainder of the rdata with embedded spaces, return the parsed string slice (sans the spaces) +// or an error +func endingToTxtSlice(c chan lex, errstr, f string) ([]string, *ParseError, string) { + // Get the remaining data until we see a zNewline + quote := false + l := <-c + var s []string + if l.err { + return s, &ParseError{f, errstr, l}, "" + } + switch l.value == zQuote { + case true: // A number of quoted string + s = make([]string, 0) + empty := true + for l.value != zNewline && l.value != zEOF { + if l.err { + return nil, &ParseError{f, errstr, l}, "" + } + switch l.value { + case zString: + empty = false + if len(l.token) > 255 { + // split up tokens that are larger than 255 into 255-chunks + sx := []string{} + p, i := 0, 255 + for { + if i <= len(l.token) { + sx = append(sx, l.token[p:i]) + } else { + sx = append(sx, l.token[p:]) + break + + } + p, i = p+255, i+255 + } + s = append(s, sx...) + break + } + + s = append(s, l.token) + case zBlank: + if quote { + // zBlank can only be seen in between txt parts. + return nil, &ParseError{f, errstr, l}, "" + } + case zQuote: + if empty && quote { + s = append(s, "") + } + quote = !quote + empty = true + default: + return nil, &ParseError{f, errstr, l}, "" + } + l = <-c + } + if quote { + return nil, &ParseError{f, errstr, l}, "" + } + case false: // Unquoted text record + s = make([]string, 1) + for l.value != zNewline && l.value != zEOF { + if l.err { + return s, &ParseError{f, errstr, l}, "" + } + s[0] += l.token + l = <-c + } + } + return s, nil, l.comment +} + +func setA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(A) + rr.Hdr = h + + l := <-c + if l.length == 0 { // Dynamic updates. + return rr, nil, "" + } + rr.A = net.ParseIP(l.token) + if rr.A == nil || l.err { + return nil, &ParseError{f, "bad A A", l}, "" + } + return rr, nil, "" +} + +func setAAAA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(AAAA) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + rr.AAAA = net.ParseIP(l.token) + if rr.AAAA == nil || l.err { + return nil, &ParseError{f, "bad AAAA AAAA", l}, "" + } + return rr, nil, "" +} + +func setNS(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NS) + rr.Hdr = h + + l := <-c + rr.Ns = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Ns = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad NS Ns", l}, "" + } + if rr.Ns[l.length-1] != '.' { + rr.Ns = appendOrigin(rr.Ns, o) + } + return rr, nil, "" +} + +func setPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(PTR) + rr.Hdr = h + + l := <-c + rr.Ptr = l.token + if l.length == 0 { // dynamic update rr. + return rr, nil, "" + } + if l.token == "@" { + rr.Ptr = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad PTR Ptr", l}, "" + } + if rr.Ptr[l.length-1] != '.' { + rr.Ptr = appendOrigin(rr.Ptr, o) + } + return rr, nil, "" +} + +func setNSAPPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NSAPPTR) + rr.Hdr = h + + l := <-c + rr.Ptr = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Ptr = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad NSAP-PTR Ptr", l}, "" + } + if rr.Ptr[l.length-1] != '.' { + rr.Ptr = appendOrigin(rr.Ptr, o) + } + return rr, nil, "" +} + +func setRP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(RP) + rr.Hdr = h + + l := <-c + rr.Mbox = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Mbox = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad RP Mbox", l}, "" + } + if rr.Mbox[l.length-1] != '.' { + rr.Mbox = appendOrigin(rr.Mbox, o) + } + } + <-c // zBlank + l = <-c + rr.Txt = l.token + if l.token == "@" { + rr.Txt = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad RP Txt", l}, "" + } + if rr.Txt[l.length-1] != '.' { + rr.Txt = appendOrigin(rr.Txt, o) + } + return rr, nil, "" +} + +func setMR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MR) + rr.Hdr = h + + l := <-c + rr.Mr = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Mr = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MR Mr", l}, "" + } + if rr.Mr[l.length-1] != '.' { + rr.Mr = appendOrigin(rr.Mr, o) + } + return rr, nil, "" +} + +func setMB(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MB) + rr.Hdr = h + + l := <-c + rr.Mb = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Mb = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MB Mb", l}, "" + } + if rr.Mb[l.length-1] != '.' { + rr.Mb = appendOrigin(rr.Mb, o) + } + return rr, nil, "" +} + +func setMG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MG) + rr.Hdr = h + + l := <-c + rr.Mg = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Mg = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MG Mg", l}, "" + } + if rr.Mg[l.length-1] != '.' { + rr.Mg = appendOrigin(rr.Mg, o) + } + return rr, nil, "" +} + +func setHINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(HINFO) + rr.Hdr = h + + chunks, e, c1 := endingToTxtSlice(c, "bad HINFO Fields", f) + if e != nil { + return nil, e, c1 + } + + if ln := len(chunks); ln == 0 { + return rr, nil, "" + } else if ln == 1 { + // Can we split it? + if out := strings.Fields(chunks[0]); len(out) > 1 { + chunks = out + } else { + chunks = append(chunks, "") + } + } + + rr.Cpu = chunks[0] + rr.Os = strings.Join(chunks[1:], " ") + + return rr, nil, "" +} + +func setMINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MINFO) + rr.Hdr = h + + l := <-c + rr.Rmail = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Rmail = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MINFO Rmail", l}, "" + } + if rr.Rmail[l.length-1] != '.' { + rr.Rmail = appendOrigin(rr.Rmail, o) + } + } + <-c // zBlank + l = <-c + rr.Email = l.token + if l.token == "@" { + rr.Email = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MINFO Email", l}, "" + } + if rr.Email[l.length-1] != '.' { + rr.Email = appendOrigin(rr.Email, o) + } + return rr, nil, "" +} + +func setMF(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MF) + rr.Hdr = h + + l := <-c + rr.Mf = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Mf = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MF Mf", l}, "" + } + if rr.Mf[l.length-1] != '.' { + rr.Mf = appendOrigin(rr.Mf, o) + } + return rr, nil, "" +} + +func setMD(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MD) + rr.Hdr = h + + l := <-c + rr.Md = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Md = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MD Md", l}, "" + } + if rr.Md[l.length-1] != '.' { + rr.Md = appendOrigin(rr.Md, o) + } + return rr, nil, "" +} + +func setMX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(MX) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad MX Pref", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Mx = l.token + if l.token == "@" { + rr.Mx = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad MX Mx", l}, "" + } + if rr.Mx[l.length-1] != '.' { + rr.Mx = appendOrigin(rr.Mx, o) + } + return rr, nil, "" +} + +func setRT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(RT) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil { + return nil, &ParseError{f, "bad RT Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Host = l.token + if l.token == "@" { + rr.Host = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad RT Host", l}, "" + } + if rr.Host[l.length-1] != '.' { + rr.Host = appendOrigin(rr.Host, o) + } + return rr, nil, "" +} + +func setAFSDB(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(AFSDB) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad AFSDB Subtype", l}, "" + } + rr.Subtype = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Hostname = l.token + if l.token == "@" { + rr.Hostname = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad AFSDB Hostname", l}, "" + } + if rr.Hostname[l.length-1] != '.' { + rr.Hostname = appendOrigin(rr.Hostname, o) + } + return rr, nil, "" +} + +func setX25(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(X25) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + if l.err { + return nil, &ParseError{f, "bad X25 PSDNAddress", l}, "" + } + rr.PSDNAddress = l.token + return rr, nil, "" +} + +func setKX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(KX) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad KX Pref", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Exchanger = l.token + if l.token == "@" { + rr.Exchanger = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad KX Exchanger", l}, "" + } + if rr.Exchanger[l.length-1] != '.' { + rr.Exchanger = appendOrigin(rr.Exchanger, o) + } + return rr, nil, "" +} + +func setCNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(CNAME) + rr.Hdr = h + + l := <-c + rr.Target = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Target = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad CNAME Target", l}, "" + } + if rr.Target[l.length-1] != '.' { + rr.Target = appendOrigin(rr.Target, o) + } + return rr, nil, "" +} + +func setDNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(DNAME) + rr.Hdr = h + + l := <-c + rr.Target = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Target = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad CNAME Target", l}, "" + } + if rr.Target[l.length-1] != '.' { + rr.Target = appendOrigin(rr.Target, o) + } + return rr, nil, "" +} + +func setSOA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(SOA) + rr.Hdr = h + + l := <-c + rr.Ns = l.token + if l.length == 0 { + return rr, nil, "" + } + <-c // zBlank + if l.token == "@" { + rr.Ns = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad SOA Ns", l}, "" + } + if rr.Ns[l.length-1] != '.' { + rr.Ns = appendOrigin(rr.Ns, o) + } + } + + l = <-c + rr.Mbox = l.token + if l.token == "@" { + rr.Mbox = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad SOA Mbox", l}, "" + } + if rr.Mbox[l.length-1] != '.' { + rr.Mbox = appendOrigin(rr.Mbox, o) + } + } + <-c // zBlank + + var ( + v uint32 + ok bool + ) + for i := 0; i < 5; i++ { + l = <-c + if l.err { + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + } + if j, e := strconv.Atoi(l.token); e != nil { + if i == 0 { + // Serial should be a number + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + } + if v, ok = stringToTtl(l.token); !ok { + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + + } + } else { + v = uint32(j) + } + switch i { + case 0: + rr.Serial = v + <-c // zBlank + case 1: + rr.Refresh = v + <-c // zBlank + case 2: + rr.Retry = v + <-c // zBlank + case 3: + rr.Expire = v + <-c // zBlank + case 4: + rr.Minttl = v + } + } + return rr, nil, "" +} + +func setSRV(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(SRV) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Priority", l}, "" + } + rr.Priority = uint16(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Weight", l}, "" + } + rr.Weight = uint16(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Port", l}, "" + } + rr.Port = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Target = l.token + if l.token == "@" { + rr.Target = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad SRV Target", l}, "" + } + if rr.Target[l.length-1] != '.' { + rr.Target = appendOrigin(rr.Target, o) + } + return rr, nil, "" +} + +func setNAPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NAPTR) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NAPTR Order", l}, "" + } + rr.Order = uint16(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NAPTR Preference", l}, "" + } + rr.Preference = uint16(i) + // Flags + <-c // zBlank + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + l = <-c // Either String or Quote + if l.value == zString { + rr.Flags = l.token + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + } else if l.value == zQuote { + rr.Flags = "" + } else { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + + // Service + <-c // zBlank + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + l = <-c // Either String or Quote + if l.value == zString { + rr.Service = l.token + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + } else if l.value == zQuote { + rr.Service = "" + } else { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + + // Regexp + <-c // zBlank + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + l = <-c // Either String or Quote + if l.value == zString { + rr.Regexp = l.token + l = <-c // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + } else if l.value == zQuote { + rr.Regexp = "" + } else { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + // After quote no space?? + <-c // zBlank + l = <-c // zString + rr.Replacement = l.token + if l.token == "@" { + rr.Replacement = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad NAPTR Replacement", l}, "" + } + if rr.Replacement[l.length-1] != '.' { + rr.Replacement = appendOrigin(rr.Replacement, o) + } + return rr, nil, "" +} + +func setTALINK(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(TALINK) + rr.Hdr = h + + l := <-c + rr.PreviousName = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.PreviousName = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad TALINK PreviousName", l}, "" + } + if rr.PreviousName[l.length-1] != '.' { + rr.PreviousName = appendOrigin(rr.PreviousName, o) + } + } + <-c // zBlank + l = <-c + rr.NextName = l.token + if l.token == "@" { + rr.NextName = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad TALINK NextName", l}, "" + } + if rr.NextName[l.length-1] != '.' { + rr.NextName = appendOrigin(rr.NextName, o) + } + return rr, nil, "" +} + +func setLOC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(LOC) + rr.Hdr = h + // Non zero defaults for LOC record, see RFC 1876, Section 3. + rr.HorizPre = 165 // 10000 + rr.VertPre = 162 // 10 + rr.Size = 18 // 1 + ok := false + // North + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude", l}, "" + } + rr.Latitude = 1000 * 60 * 60 * uint32(i) + + <-c // zBlank + // Either number, 'N' or 'S' + l = <-c + if rr.Latitude, ok = locCheckNorth(l.token, rr.Latitude); ok { + goto East + } + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude minutes", l}, "" + } + rr.Latitude += 1000 * 60 * uint32(i) + + <-c // zBlank + l = <-c + if i, e := strconv.ParseFloat(l.token, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude seconds", l}, "" + } else { + rr.Latitude += uint32(1000 * i) + } + <-c // zBlank + // Either number, 'N' or 'S' + l = <-c + if rr.Latitude, ok = locCheckNorth(l.token, rr.Latitude); ok { + goto East + } + // If still alive, flag an error + return nil, &ParseError{f, "bad LOC Latitude North/South", l}, "" + +East: + // East + <-c // zBlank + l = <-c + if i, e := strconv.Atoi(l.token); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude", l}, "" + } else { + rr.Longitude = 1000 * 60 * 60 * uint32(i) + } + <-c // zBlank + // Either number, 'E' or 'W' + l = <-c + if rr.Longitude, ok = locCheckEast(l.token, rr.Longitude); ok { + goto Altitude + } + if i, e := strconv.Atoi(l.token); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude minutes", l}, "" + } else { + rr.Longitude += 1000 * 60 * uint32(i) + } + <-c // zBlank + l = <-c + if i, e := strconv.ParseFloat(l.token, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude seconds", l}, "" + } else { + rr.Longitude += uint32(1000 * i) + } + <-c // zBlank + // Either number, 'E' or 'W' + l = <-c + if rr.Longitude, ok = locCheckEast(l.token, rr.Longitude); ok { + goto Altitude + } + // If still alive, flag an error + return nil, &ParseError{f, "bad LOC Longitude East/West", l}, "" + +Altitude: + <-c // zBlank + l = <-c + if l.length == 0 || l.err { + return nil, &ParseError{f, "bad LOC Altitude", l}, "" + } + if l.token[len(l.token)-1] == 'M' || l.token[len(l.token)-1] == 'm' { + l.token = l.token[0 : len(l.token)-1] + } + if i, e := strconv.ParseFloat(l.token, 32); e != nil { + return nil, &ParseError{f, "bad LOC Altitude", l}, "" + } else { + rr.Altitude = uint32(i*100.0 + 10000000.0 + 0.5) + } + + // And now optionally the other values + l = <-c + count := 0 + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zString: + switch count { + case 0: // Size + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC Size", l}, "" + } + rr.Size = (e & 0x0f) | (m << 4 & 0xf0) + case 1: // HorizPre + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC HorizPre", l}, "" + } + rr.HorizPre = (e & 0x0f) | (m << 4 & 0xf0) + case 2: // VertPre + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC VertPre", l}, "" + } + rr.VertPre = (e & 0x0f) | (m << 4 & 0xf0) + } + count++ + case zBlank: + // Ok + default: + return nil, &ParseError{f, "bad LOC Size, HorizPre or VertPre", l}, "" + } + l = <-c + } + return rr, nil, "" +} + +func setHIP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(HIP) + rr.Hdr = h + + // HitLength is not represented + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad HIP PublicKeyAlgorithm", l}, "" + } + rr.PublicKeyAlgorithm = uint8(i) + <-c // zBlank + l = <-c // zString + if l.length == 0 || l.err { + return nil, &ParseError{f, "bad HIP Hit", l}, "" + } + rr.Hit = l.token // This can not contain spaces, see RFC 5205 Section 6. + rr.HitLength = uint8(len(rr.Hit)) / 2 + + <-c // zBlank + l = <-c // zString + if l.length == 0 || l.err { + return nil, &ParseError{f, "bad HIP PublicKey", l}, "" + } + rr.PublicKey = l.token // This cannot contain spaces + rr.PublicKeyLength = uint16(base64.StdEncoding.DecodedLen(len(rr.PublicKey))) + + // RendezvousServers (if any) + l = <-c + var xs []string + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zString: + if l.token == "@" { + xs = append(xs, o) + l = <-c + continue + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad HIP RendezvousServers", l}, "" + } + if l.token[l.length-1] != '.' { + l.token = appendOrigin(l.token, o) + } + xs = append(xs, l.token) + case zBlank: + // Ok + default: + return nil, &ParseError{f, "bad HIP RendezvousServers", l}, "" + } + l = <-c + } + rr.RendezvousServers = xs + return rr, nil, l.comment +} + +func setCERT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(CERT) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + if v, ok := StringToCertType[l.token]; ok { + rr.Type = v + } else if i, e := strconv.Atoi(l.token); e != nil { + return nil, &ParseError{f, "bad CERT Type", l}, "" + } else { + rr.Type = uint16(i) + } + <-c // zBlank + l = <-c // zString + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad CERT KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + <-c // zBlank + l = <-c // zString + if v, ok := StringToAlgorithm[l.token]; ok { + rr.Algorithm = v + } else if i, e := strconv.Atoi(l.token); e != nil { + return nil, &ParseError{f, "bad CERT Algorithm", l}, "" + } else { + rr.Algorithm = uint8(i) + } + s, e1, c1 := endingToString(c, "bad CERT Certificate", f) + if e1 != nil { + return nil, e1, c1 + } + rr.Certificate = s + return rr, nil, c1 +} + +func setOPENPGPKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(OPENPGPKEY) + rr.Hdr = h + + s, e, c1 := endingToString(c, "bad OPENPGPKEY PublicKey", f) + if e != nil { + return nil, e, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setSIG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setRRSIG(h, c, o, f) + if r != nil { + return &SIG{*r.(*RRSIG)}, e, s + } + return nil, e, s +} + +func setRRSIG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(RRSIG) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + if t, ok := StringToType[l.tokenUpper]; !ok { + if strings.HasPrefix(l.tokenUpper, "TYPE") { + t, ok = typeToInt(l.tokenUpper) + if !ok { + return nil, &ParseError{f, "bad RRSIG Typecovered", l}, "" + } + rr.TypeCovered = t + } else { + return nil, &ParseError{f, "bad RRSIG Typecovered", l}, "" + } + } else { + rr.TypeCovered = t + } + <-c // zBlank + l = <-c + i, err := strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + <-c // zBlank + l = <-c + i, err = strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG Labels", l}, "" + } + rr.Labels = uint8(i) + <-c // zBlank + l = <-c + i, err = strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG OrigTtl", l}, "" + } + rr.OrigTtl = uint32(i) + <-c // zBlank + l = <-c + if i, err := StringToTime(l.token); err != nil { + // Try to see if all numeric and use it as epoch + if i, err := strconv.ParseInt(l.token, 10, 64); err == nil { + // TODO(miek): error out on > MAX_UINT32, same below + rr.Expiration = uint32(i) + } else { + return nil, &ParseError{f, "bad RRSIG Expiration", l}, "" + } + } else { + rr.Expiration = i + } + <-c // zBlank + l = <-c + if i, err := StringToTime(l.token); err != nil { + if i, err := strconv.ParseInt(l.token, 10, 64); err == nil { + rr.Inception = uint32(i) + } else { + return nil, &ParseError{f, "bad RRSIG Inception", l}, "" + } + } else { + rr.Inception = i + } + <-c // zBlank + l = <-c + i, err = strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + <-c // zBlank + l = <-c + rr.SignerName = l.token + if l.token == "@" { + rr.SignerName = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad RRSIG SignerName", l}, "" + } + if rr.SignerName[l.length-1] != '.' { + rr.SignerName = appendOrigin(rr.SignerName, o) + } + } + s, e, c1 := endingToString(c, "bad RRSIG Signature", f) + if e != nil { + return nil, e, c1 + } + rr.Signature = s + return rr, nil, c1 +} + +func setNSEC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NSEC) + rr.Hdr = h + + l := <-c + rr.NextDomain = l.token + if l.length == 0 { + return rr, nil, l.comment + } + if l.token == "@" { + rr.NextDomain = o + } else { + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad NSEC NextDomain", l}, "" + } + if rr.NextDomain[l.length-1] != '.' { + rr.NextDomain = appendOrigin(rr.NextDomain, o) + } + } + + rr.TypeBitMap = make([]uint16, 0) + var ( + k uint16 + ok bool + ) + l = <-c + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + if k, ok = StringToType[l.tokenUpper]; !ok { + if k, ok = typeToInt(l.tokenUpper); !ok { + return nil, &ParseError{f, "bad NSEC TypeBitMap", l}, "" + } + } + rr.TypeBitMap = append(rr.TypeBitMap, k) + default: + return nil, &ParseError{f, "bad NSEC TypeBitMap", l}, "" + } + l = <-c + } + return rr, nil, l.comment +} + +func setNSEC3(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NSEC3) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Hash", l}, "" + } + rr.Hash = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Flags", l}, "" + } + rr.Flags = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Iterations", l}, "" + } + rr.Iterations = uint16(i) + <-c + l = <-c + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad NSEC3 Salt", l}, "" + } + rr.SaltLength = uint8(len(l.token)) / 2 + rr.Salt = l.token + + <-c + l = <-c + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad NSEC3 NextDomain", l}, "" + } + rr.HashLength = 20 // Fix for NSEC3 (sha1 160 bits) + rr.NextDomain = l.token + + rr.TypeBitMap = make([]uint16, 0) + var ( + k uint16 + ok bool + ) + l = <-c + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + if k, ok = StringToType[l.tokenUpper]; !ok { + if k, ok = typeToInt(l.tokenUpper); !ok { + return nil, &ParseError{f, "bad NSEC3 TypeBitMap", l}, "" + } + } + rr.TypeBitMap = append(rr.TypeBitMap, k) + default: + return nil, &ParseError{f, "bad NSEC3 TypeBitMap", l}, "" + } + l = <-c + } + return rr, nil, l.comment +} + +func setNSEC3PARAM(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NSEC3PARAM) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Hash", l}, "" + } + rr.Hash = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Flags", l}, "" + } + rr.Flags = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Iterations", l}, "" + } + rr.Iterations = uint16(i) + <-c + l = <-c + rr.SaltLength = uint8(len(l.token)) + rr.Salt = l.token + return rr, nil, "" +} + +func setEUI48(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(EUI48) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + if l.length != 17 || l.err { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + addr := make([]byte, 12) + dash := 0 + for i := 0; i < 10; i += 2 { + addr[i] = l.token[i+dash] + addr[i+1] = l.token[i+1+dash] + dash++ + if l.token[i+1+dash] != '-' { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + } + addr[10] = l.token[15] + addr[11] = l.token[16] + + i, e := strconv.ParseUint(string(addr), 16, 48) + if e != nil { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + rr.Address = i + return rr, nil, "" +} + +func setEUI64(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(EUI64) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + if l.length != 23 || l.err { + return nil, &ParseError{f, "bad EUI64 Address", l}, "" + } + addr := make([]byte, 16) + dash := 0 + for i := 0; i < 14; i += 2 { + addr[i] = l.token[i+dash] + addr[i+1] = l.token[i+1+dash] + dash++ + if l.token[i+1+dash] != '-' { + return nil, &ParseError{f, "bad EUI64 Address", l}, "" + } + } + addr[14] = l.token[21] + addr[15] = l.token[22] + + i, e := strconv.ParseUint(string(addr), 16, 64) + if e != nil { + return nil, &ParseError{f, "bad EUI68 Address", l}, "" + } + rr.Address = uint64(i) + return rr, nil, "" +} + +func setWKS(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(WKS) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + rr.Address = net.ParseIP(l.token) + if rr.Address == nil || l.err { + return nil, &ParseError{f, "bad WKS Address", l}, "" + } + + <-c // zBlank + l = <-c + proto := "tcp" + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad WKS Protocol", l}, "" + } + rr.Protocol = uint8(i) + switch rr.Protocol { + case 17: + proto = "udp" + case 6: + proto = "tcp" + default: + return nil, &ParseError{f, "bad WKS Protocol", l}, "" + } + + <-c + l = <-c + rr.BitMap = make([]uint16, 0) + var ( + k int + err error + ) + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + if k, err = net.LookupPort(proto, l.token); err != nil { + i, e := strconv.Atoi(l.token) // If a number use that + if e != nil { + return nil, &ParseError{f, "bad WKS BitMap", l}, "" + } + rr.BitMap = append(rr.BitMap, uint16(i)) + } + rr.BitMap = append(rr.BitMap, uint16(k)) + default: + return nil, &ParseError{f, "bad WKS BitMap", l}, "" + } + l = <-c + } + return rr, nil, l.comment +} + +func setSSHFP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(SSHFP) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad SSHFP Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad SSHFP Type", l}, "" + } + rr.Type = uint8(i) + <-c // zBlank + s, e1, c1 := endingToString(c, "bad SSHFP Fingerprint", f) + if e1 != nil { + return nil, e1, c1 + } + rr.FingerPrint = s + return rr, nil, "" +} + +func setDNSKEYs(h RR_Header, c chan lex, o, f, typ string) (RR, *ParseError, string) { + rr := new(DNSKEY) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Flags", l}, "" + } + rr.Flags = uint16(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Protocol", l}, "" + } + rr.Protocol = uint8(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + s, e1, c1 := endingToString(c, "bad "+typ+" PublicKey", f) + if e1 != nil { + return nil, e1, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "KEY") + if r != nil { + return &KEY{*r.(*DNSKEY)}, e, s + } + return nil, e, s +} + +func setDNSKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "DNSKEY") + return r, e, s +} + +func setCDNSKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "CDNSKEY") + if r != nil { + return &CDNSKEY{*r.(*DNSKEY)}, e, s + } + return nil, e, s +} + +func setRKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(RKEY) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Flags", l}, "" + } + rr.Flags = uint16(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Protocol", l}, "" + } + rr.Protocol = uint8(i) + <-c // zBlank + l = <-c // zString + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + s, e1, c1 := endingToString(c, "bad RKEY PublicKey", f) + if e1 != nil { + return nil, e1, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setEID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(EID) + rr.Hdr = h + s, e, c1 := endingToString(c, "bad EID Endpoint", f) + if e != nil { + return nil, e, c1 + } + rr.Endpoint = s + return rr, nil, c1 +} + +func setNIMLOC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NIMLOC) + rr.Hdr = h + s, e, c1 := endingToString(c, "bad NIMLOC Locator", f) + if e != nil { + return nil, e, c1 + } + rr.Locator = s + return rr, nil, c1 +} + +func setGPOS(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(GPOS) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, "" + } + _, e := strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Longitude", l}, "" + } + rr.Longitude = l.token + <-c // zBlank + l = <-c + _, e = strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Latitude", l}, "" + } + rr.Latitude = l.token + <-c // zBlank + l = <-c + _, e = strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Altitude", l}, "" + } + rr.Altitude = l.token + return rr, nil, "" +} + +func setDSs(h RR_Header, c chan lex, o, f, typ string) (RR, *ParseError, string) { + rr := new(DS) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + <-c // zBlank + l = <-c + if i, e := strconv.Atoi(l.token); e != nil { + i, ok := StringToAlgorithm[l.tokenUpper] + if !ok || l.err { + return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, "" + } + rr.Algorithm = i + } else { + rr.Algorithm = uint8(i) + } + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " DigestType", l}, "" + } + rr.DigestType = uint8(i) + s, e1, c1 := endingToString(c, "bad "+typ+" Digest", f) + if e1 != nil { + return nil, e1, c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setDS(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "DS") + return r, e, s +} + +func setDLV(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "DLV") + if r != nil { + return &DLV{*r.(*DS)}, e, s + } + return nil, e, s +} + +func setCDS(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "CDS") + if r != nil { + return &CDS{*r.(*DS)}, e, s + } + return nil, e, s +} + +func setTA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(TA) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad TA KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + <-c // zBlank + l = <-c + if i, e := strconv.Atoi(l.token); e != nil { + i, ok := StringToAlgorithm[l.tokenUpper] + if !ok || l.err { + return nil, &ParseError{f, "bad TA Algorithm", l}, "" + } + rr.Algorithm = i + } else { + rr.Algorithm = uint8(i) + } + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad TA DigestType", l}, "" + } + rr.DigestType = uint8(i) + s, e, c1 := endingToString(c, "bad TA Digest", f) + if e != nil { + return nil, e.(*ParseError), c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setTLSA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(TLSA) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA Usage", l}, "" + } + rr.Usage = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA Selector", l}, "" + } + rr.Selector = uint8(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA MatchingType", l}, "" + } + rr.MatchingType = uint8(i) + // So this needs be e2 (i.e. different than e), because...??t + s, e2, c1 := endingToString(c, "bad TLSA Certificate", f) + if e2 != nil { + return nil, e2, c1 + } + rr.Certificate = s + return rr, nil, c1 +} + +func setRFC3597(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(RFC3597) + rr.Hdr = h + l := <-c + if l.token != "\\#" { + return nil, &ParseError{f, "bad RFC3597 Rdata", l}, "" + } + <-c // zBlank + l = <-c + rdlength, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad RFC3597 Rdata ", l}, "" + } + + s, e1, c1 := endingToString(c, "bad RFC3597 Rdata", f) + if e1 != nil { + return nil, e1, c1 + } + if rdlength*2 != len(s) { + return nil, &ParseError{f, "bad RFC3597 Rdata", l}, "" + } + rr.Rdata = s + return rr, nil, c1 +} + +func setSPF(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(SPF) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad SPF Txt", f) + if e != nil { + return nil, e, "" + } + rr.Txt = s + return rr, nil, c1 +} + +func setTXT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(TXT) + rr.Hdr = h + + // no zBlank reading here, because all this rdata is TXT + s, e, c1 := endingToTxtSlice(c, "bad TXT Txt", f) + if e != nil { + return nil, e, "" + } + rr.Txt = s + return rr, nil, c1 +} + +// identical to setTXT +func setNINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NINFO) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad NINFO ZSData", f) + if e != nil { + return nil, e, "" + } + rr.ZSData = s + return rr, nil, c1 +} + +func setURI(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(URI) + rr.Hdr = h + + l := <-c + if l.length == 0 { // Dynamic updates. + return rr, nil, "" + } + + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad URI Priority", l}, "" + } + rr.Priority = uint16(i) + <-c // zBlank + l = <-c + i, e = strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad URI Weight", l}, "" + } + rr.Weight = uint16(i) + + <-c // zBlank + s, err, c1 := endingToTxtSlice(c, "bad URI Target", f) + if err != nil { + return nil, err, "" + } + if len(s) > 1 { + return nil, &ParseError{f, "bad URI Target", l}, "" + } + rr.Target = s[0] + return rr, nil, c1 +} + +func setDHCID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + // awesome record to parse! + rr := new(DHCID) + rr.Hdr = h + + s, e, c1 := endingToString(c, "bad DHCID Digest", f) + if e != nil { + return nil, e, c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setNID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(NID) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad NID Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + u, err := stringToNodeID(l) + if err != nil || l.err { + return nil, err, "" + } + rr.NodeID = u + return rr, nil, "" +} + +func setL32(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(L32) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad L32 Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Locator32 = net.ParseIP(l.token) + if rr.Locator32 == nil || l.err { + return nil, &ParseError{f, "bad L32 Locator", l}, "" + } + return rr, nil, "" +} + +func setLP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(LP) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad LP Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Fqdn = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Fqdn = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad LP Fqdn", l}, "" + } + if rr.Fqdn[l.length-1] != '.' { + rr.Fqdn = appendOrigin(rr.Fqdn, o) + } + return rr, nil, "" +} + +func setL64(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(L64) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad L64 Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + u, err := stringToNodeID(l) + if err != nil || l.err { + return nil, err, "" + } + rr.Locator64 = u + return rr, nil, "" +} + +func setUID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(UID) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad UID Uid", l}, "" + } + rr.Uid = uint32(i) + return rr, nil, "" +} + +func setGID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(GID) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad GID Gid", l}, "" + } + rr.Gid = uint32(i) + return rr, nil, "" +} + +func setUINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(UINFO) + rr.Hdr = h + s, e, c1 := endingToTxtSlice(c, "bad UINFO Uinfo", f) + if e != nil { + return nil, e, "" + } + rr.Uinfo = s[0] // silently discard anything above + return rr, nil, c1 +} + +func setPX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(PX) + rr.Hdr = h + + l := <-c + if l.length == 0 { + return rr, nil, "" + } + i, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad PX Preference", l}, "" + } + rr.Preference = uint16(i) + <-c // zBlank + l = <-c // zString + rr.Map822 = l.token + if l.length == 0 { + return rr, nil, "" + } + if l.token == "@" { + rr.Map822 = o + return rr, nil, "" + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad PX Map822", l}, "" + } + if rr.Map822[l.length-1] != '.' { + rr.Map822 = appendOrigin(rr.Map822, o) + } + <-c // zBlank + l = <-c // zString + rr.Mapx400 = l.token + if l.token == "@" { + rr.Mapx400 = o + return rr, nil, "" + } + _, ok = IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad PX Mapx400", l}, "" + } + if rr.Mapx400[l.length-1] != '.' { + rr.Mapx400 = appendOrigin(rr.Mapx400, o) + } + return rr, nil, "" +} + +func setIPSECKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(IPSECKEY) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, err := strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad IPSECKEY Precedence", l}, "" + } + rr.Precedence = uint8(i) + <-c // zBlank + l = <-c + i, err = strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad IPSECKEY GatewayType", l}, "" + } + rr.GatewayType = uint8(i) + <-c // zBlank + l = <-c + i, err = strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad IPSECKEY Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + + // Now according to GatewayType we can have different elements here + <-c // zBlank + l = <-c + switch rr.GatewayType { + case 0: + fallthrough + case 3: + rr.GatewayName = l.token + if l.token == "@" { + rr.GatewayName = o + } + _, ok := IsDomainName(l.token) + if !ok || l.length == 0 || l.err { + return nil, &ParseError{f, "bad IPSECKEY GatewayName", l}, "" + } + if rr.GatewayName[l.length-1] != '.' { + rr.GatewayName = appendOrigin(rr.GatewayName, o) + } + case 1: + rr.GatewayA = net.ParseIP(l.token) + if rr.GatewayA == nil { + return nil, &ParseError{f, "bad IPSECKEY GatewayA", l}, "" + } + case 2: + rr.GatewayAAAA = net.ParseIP(l.token) + if rr.GatewayAAAA == nil { + return nil, &ParseError{f, "bad IPSECKEY GatewayAAAA", l}, "" + } + default: + return nil, &ParseError{f, "bad IPSECKEY GatewayType", l}, "" + } + + s, e, c1 := endingToString(c, "bad IPSECKEY PublicKey", f) + if e != nil { + return nil, e, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setCAA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { + rr := new(CAA) + rr.Hdr = h + l := <-c + if l.length == 0 { + return rr, nil, l.comment + } + i, err := strconv.Atoi(l.token) + if err != nil || l.err { + return nil, &ParseError{f, "bad CAA Flag", l}, "" + } + rr.Flag = uint8(i) + + <-c // zBlank + l = <-c // zString + if l.value != zString { + return nil, &ParseError{f, "bad CAA Tag", l}, "" + } + rr.Tag = l.token + + <-c // zBlank + s, e, c1 := endingToTxtSlice(c, "bad CAA Value", f) + if e != nil { + return nil, e, "" + } + if len(s) > 1 { + return nil, &ParseError{f, "bad CAA Value", l}, "" + } + rr.Value = s[0] + return rr, nil, c1 +} + +var typeToparserFunc = map[uint16]parserFunc{ + TypeAAAA: parserFunc{setAAAA, false}, + TypeAFSDB: parserFunc{setAFSDB, false}, + TypeA: parserFunc{setA, false}, + TypeCAA: parserFunc{setCAA, true}, + TypeCDS: parserFunc{setCDS, true}, + TypeCDNSKEY: parserFunc{setCDNSKEY, true}, + TypeCERT: parserFunc{setCERT, true}, + TypeCNAME: parserFunc{setCNAME, false}, + TypeDHCID: parserFunc{setDHCID, true}, + TypeDLV: parserFunc{setDLV, true}, + TypeDNAME: parserFunc{setDNAME, false}, + TypeKEY: parserFunc{setKEY, true}, + TypeDNSKEY: parserFunc{setDNSKEY, true}, + TypeDS: parserFunc{setDS, true}, + TypeEID: parserFunc{setEID, true}, + TypeEUI48: parserFunc{setEUI48, false}, + TypeEUI64: parserFunc{setEUI64, false}, + TypeGID: parserFunc{setGID, false}, + TypeGPOS: parserFunc{setGPOS, false}, + TypeHINFO: parserFunc{setHINFO, true}, + TypeHIP: parserFunc{setHIP, true}, + TypeIPSECKEY: parserFunc{setIPSECKEY, true}, + TypeKX: parserFunc{setKX, false}, + TypeL32: parserFunc{setL32, false}, + TypeL64: parserFunc{setL64, false}, + TypeLOC: parserFunc{setLOC, true}, + TypeLP: parserFunc{setLP, false}, + TypeMB: parserFunc{setMB, false}, + TypeMD: parserFunc{setMD, false}, + TypeMF: parserFunc{setMF, false}, + TypeMG: parserFunc{setMG, false}, + TypeMINFO: parserFunc{setMINFO, false}, + TypeMR: parserFunc{setMR, false}, + TypeMX: parserFunc{setMX, false}, + TypeNAPTR: parserFunc{setNAPTR, false}, + TypeNID: parserFunc{setNID, false}, + TypeNIMLOC: parserFunc{setNIMLOC, true}, + TypeNINFO: parserFunc{setNINFO, true}, + TypeNSAPPTR: parserFunc{setNSAPPTR, false}, + TypeNSEC3PARAM: parserFunc{setNSEC3PARAM, false}, + TypeNSEC3: parserFunc{setNSEC3, true}, + TypeNSEC: parserFunc{setNSEC, true}, + TypeNS: parserFunc{setNS, false}, + TypeOPENPGPKEY: parserFunc{setOPENPGPKEY, true}, + TypePTR: parserFunc{setPTR, false}, + TypePX: parserFunc{setPX, false}, + TypeSIG: parserFunc{setSIG, true}, + TypeRKEY: parserFunc{setRKEY, true}, + TypeRP: parserFunc{setRP, false}, + TypeRRSIG: parserFunc{setRRSIG, true}, + TypeRT: parserFunc{setRT, false}, + TypeSOA: parserFunc{setSOA, false}, + TypeSPF: parserFunc{setSPF, true}, + TypeSRV: parserFunc{setSRV, false}, + TypeSSHFP: parserFunc{setSSHFP, true}, + TypeTALINK: parserFunc{setTALINK, false}, + TypeTA: parserFunc{setTA, true}, + TypeTLSA: parserFunc{setTLSA, true}, + TypeTXT: parserFunc{setTXT, true}, + TypeUID: parserFunc{setUID, false}, + TypeUINFO: parserFunc{setUINFO, true}, + TypeURI: parserFunc{setURI, true}, + TypeWKS: parserFunc{setWKS, true}, + TypeX25: parserFunc{setX25, false}, +} diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go index 7e87f1a..74ed5a9 100644 --- a/vendor/github.com/prometheus/common/model/time.go +++ b/vendor/github.com/prometheus/common/model/time.go @@ -214,6 +214,9 @@ func (d Duration) String() string { ms = int64(time.Duration(d) / time.Millisecond) unit = "ms" ) + if ms == 0 { + return "0s" + } factors := map[string]int64{ "y": 1000 * 60 * 60 * 24 * 365, "w": 1000 * 60 * 60 * 24 * 7, diff --git a/vendor/golang.org/x/crypto/acme/acme.go b/vendor/golang.org/x/crypto/acme/acme.go index 1f4fb69..8257ffb 100644 --- a/vendor/golang.org/x/crypto/acme/acme.go +++ b/vendor/golang.org/x/crypto/acme/acme.go @@ -14,7 +14,6 @@ package acme import ( - "bytes" "context" "crypto" "crypto/ecdsa" @@ -23,6 +22,8 @@ import ( "crypto/sha256" "crypto/tls" "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" "encoding/base64" "encoding/hex" "encoding/json" @@ -33,7 +34,6 @@ import ( "io/ioutil" "math/big" "net/http" - "strconv" "strings" "sync" "time" @@ -42,6 +42,9 @@ import ( // LetsEncryptURL is the Directory endpoint of Let's Encrypt CA. const LetsEncryptURL = "https://acme-v01.api.letsencrypt.org/directory" +// idPeACMEIdentifierV1 is the OID for the ACME extension for the TLS-ALPN challenge. +var idPeACMEIdentifierV1 = asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 1, 30, 1} + const ( maxChainLen = 5 // max depth and breadth of a certificate chain maxCertSize = 1 << 20 // max size of a certificate, in bytes @@ -76,6 +79,22 @@ type Client struct { // will have no effect. DirectoryURL string + // RetryBackoff computes the duration after which the nth retry of a failed request + // should occur. The value of n for the first call on failure is 1. + // The values of r and resp are the request and response of the last failed attempt. + // If the returned value is negative or zero, no more retries are done and an error + // is returned to the caller of the original method. + // + // Requests which result in a 4xx client error are not retried, + // except for 400 Bad Request due to "bad nonce" errors and 429 Too Many Requests. + // + // If RetryBackoff is nil, a truncated exponential backoff algorithm + // with the ceiling of 10 seconds is used, where each subsequent retry n + // is done after either ("Retry-After" + jitter) or (2^n seconds + jitter), + // preferring the former if "Retry-After" header is found in the resp. + // The jitter is a random value up to 1 second. + RetryBackoff func(n int, r *http.Request, resp *http.Response) time.Duration + dirMu sync.Mutex // guards writes to dir dir *Directory // cached result of Client's Discover method @@ -99,15 +118,12 @@ func (c *Client) Discover(ctx context.Context) (Directory, error) { if dirURL == "" { dirURL = LetsEncryptURL } - res, err := c.get(ctx, dirURL) + res, err := c.get(ctx, dirURL, wantStatus(http.StatusOK)) if err != nil { return Directory{}, err } defer res.Body.Close() c.addNonce(res.Header) - if res.StatusCode != http.StatusOK { - return Directory{}, responseError(res) - } var v struct { Reg string `json:"new-reg"` @@ -166,14 +182,11 @@ func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration, req.NotAfter = now.Add(exp).Format(time.RFC3339) } - res, err := c.retryPostJWS(ctx, c.Key, c.dir.CertURL, req) + res, err := c.post(ctx, c.Key, c.dir.CertURL, req, wantStatus(http.StatusCreated)) if err != nil { return nil, "", err } defer res.Body.Close() - if res.StatusCode != http.StatusCreated { - return nil, "", responseError(res) - } curl := res.Header.Get("Location") // cert permanent URL if res.ContentLength == 0 { @@ -196,26 +209,11 @@ 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 // and has expected features. func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]byte, error) { - for { - res, err := c.get(ctx, url) - if err != nil { - return nil, err - } - defer res.Body.Close() - if res.StatusCode == http.StatusOK { - return c.responseCert(ctx, res, bundle) - } - if res.StatusCode > 299 { - return nil, responseError(res) - } - d := retryAfter(res.Header.Get("Retry-After"), 3*time.Second) - select { - case <-time.After(d): - // retry - case <-ctx.Done(): - return nil, ctx.Err() - } + 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. @@ -241,14 +239,11 @@ func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte, if key == nil { key = c.Key } - res, err := c.retryPostJWS(ctx, key, c.dir.RevokeURL, body) + res, err := c.post(ctx, key, c.dir.RevokeURL, body, wantStatus(http.StatusOK)) if err != nil { return err } defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return responseError(res) - } return nil } @@ -329,14 +324,11 @@ func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, Resource: "new-authz", Identifier: authzID{Type: "dns", Value: domain}, } - res, err := c.retryPostJWS(ctx, c.Key, c.dir.AuthzURL, req) + res, err := c.post(ctx, c.Key, c.dir.AuthzURL, req, wantStatus(http.StatusCreated)) if err != nil { return nil, err } defer res.Body.Close() - if res.StatusCode != http.StatusCreated { - return nil, responseError(res) - } var v wireAuthz if err := json.NewDecoder(res.Body).Decode(&v); err != nil { @@ -353,14 +345,11 @@ func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, // If a caller needs to poll an authorization until its status is final, // see the WaitAuthorization method. func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) { - res, err := c.get(ctx, url) + res, err := c.get(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted)) if err != nil { return nil, err } defer res.Body.Close() - if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { - return nil, responseError(res) - } var v wireAuthz if err := json.NewDecoder(res.Body).Decode(&v); err != nil { return nil, fmt.Errorf("acme: invalid response: %v", err) @@ -387,14 +376,11 @@ func (c *Client) RevokeAuthorization(ctx context.Context, url string) error { Status: "deactivated", Delete: true, } - res, err := c.retryPostJWS(ctx, c.Key, url, req) + res, err := c.post(ctx, c.Key, url, req, wantStatus(http.StatusOK)) if err != nil { return err } defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return responseError(res) - } return nil } @@ -406,44 +392,42 @@ func (c *Client) RevokeAuthorization(ctx context.Context, url string) error { // In all other cases WaitAuthorization returns an error. // If the Status is StatusInvalid, the returned error is of type *AuthorizationError. func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) { - sleep := sleeper(ctx) for { - res, err := c.get(ctx, url) + res, err := c.get(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted)) if err != nil { return nil, err } - if res.StatusCode >= 400 && res.StatusCode <= 499 { - // Non-retriable error. For instance, Let's Encrypt may return 404 Not Found - // when requesting an expired authorization. - defer res.Body.Close() - return nil, responseError(res) - } - retry := res.Header.Get("Retry-After") - if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { - res.Body.Close() - if err := sleep(retry, 1); err != nil { - return nil, err - } - continue - } var raw wireAuthz err = json.NewDecoder(res.Body).Decode(&raw) res.Body.Close() - if err != nil { - if err := sleep(retry, 0); err != nil { - return nil, err - } - continue - } - if raw.Status == StatusValid { + switch { + case err != nil: + // Skip and retry. + case raw.Status == StatusValid: return raw.authorization(url), nil - } - if raw.Status == StatusInvalid { + case raw.Status == StatusInvalid: return nil, raw.error(url) } - if err := sleep(retry, 0); err != nil { - return nil, err + + // Exponential backoff is implemented in c.get above. + // This is just to prevent continuously hitting the CA + // while waiting for a final authorization status. + d := retryAfter(res.Header.Get("Retry-After")) + if d == 0 { + // Given that the fastest challenges TLS-SNI and HTTP-01 + // require a CA to make at least 1 network round trip + // and most likely persist a challenge state, + // this default delay seems reasonable. + d = time.Second + } + t := time.NewTimer(d) + select { + case <-ctx.Done(): + t.Stop() + return nil, ctx.Err() + case <-t.C: + // Retry. } } } @@ -452,14 +436,11 @@ func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorizat // // A client typically polls a challenge status using this method. func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) { - res, err := c.get(ctx, url) + res, err := c.get(ctx, url, wantStatus(http.StatusOK, http.StatusAccepted)) if err != nil { return nil, err } defer res.Body.Close() - if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { - return nil, responseError(res) - } v := wireChallenge{URI: url} if err := json.NewDecoder(res.Body).Decode(&v); err != nil { return nil, fmt.Errorf("acme: invalid response: %v", err) @@ -486,16 +467,14 @@ func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error Type: chal.Type, Auth: auth, } - res, err := c.retryPostJWS(ctx, c.Key, chal.URI, req) + res, err := c.post(ctx, c.Key, chal.URI, req, wantStatus( + http.StatusOK, // according to the spec + http.StatusAccepted, // Let's Encrypt: see https://goo.gl/WsJ7VT (acme-divergences.md) + )) if err != nil { return nil, err } defer res.Body.Close() - // Note: the protocol specifies 200 as the expected response code, but - // letsencrypt seems to be returning 202. - if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { - return nil, responseError(res) - } var v wireChallenge if err := json.NewDecoder(res.Body).Decode(&v); err != nil { @@ -552,7 +531,7 @@ func (c *Client) HTTP01ChallengePath(token string) string { // If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. // // The returned certificate is valid for the next 24 hours and must be presented only when -// the server name of the client hello matches exactly the returned name value. +// the server name of the TLS ClientHello matches exactly the returned name value. func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { ka, err := keyAuth(c.Key.Public(), token) if err != nil { @@ -579,7 +558,7 @@ func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tl // If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. // // The returned certificate is valid for the next 24 hours and must be presented only when -// the server name in the client hello matches exactly the returned name value. +// the server name in the TLS ClientHello matches exactly the returned name value. func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { b := sha256.Sum256([]byte(token)) h := hex.EncodeToString(b[:]) @@ -600,6 +579,52 @@ func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tl return cert, sanA, nil } +// TLSALPN01ChallengeCert creates a certificate for TLS-ALPN-01 challenge response. +// Servers can present the certificate to validate the challenge and prove control +// over a domain name. For more details on TLS-ALPN-01 see +// https://tools.ietf.org/html/draft-shoemaker-acme-tls-alpn-00#section-3 +// +// The token argument is a Challenge.Token value. +// If a WithKey option is provided, its private part signs the returned cert, +// and the public part is used to specify the signee. +// If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. +// +// The returned certificate is valid for the next 24 hours and must be presented only when +// the server name in the TLS ClientHello matches the domain, and the special acme-tls/1 ALPN protocol +// has been specified. +func (c *Client) TLSALPN01ChallengeCert(token, domain string, opt ...CertOption) (cert tls.Certificate, err error) { + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return tls.Certificate{}, err + } + shasum := sha256.Sum256([]byte(ka)) + extValue, err := asn1.Marshal(shasum[:]) + if err != nil { + return tls.Certificate{}, err + } + acmeExtension := pkix.Extension{ + Id: idPeACMEIdentifierV1, + Critical: true, + Value: extValue, + } + + tmpl := defaultTLSChallengeCertTemplate() + + var newOpt []CertOption + for _, o := range opt { + switch o := o.(type) { + case *certOptTemplate: + t := *(*x509.Certificate)(o) // shallow copy is ok + tmpl = &t + default: + newOpt = append(newOpt, o) + } + } + tmpl.ExtraExtensions = append(tmpl.ExtraExtensions, acmeExtension) + newOpt = append(newOpt, WithTemplate(tmpl)) + return tlsChallengeCert([]string{domain}, newOpt) +} + // doReg sends all types of registration requests. // The type of request is identified by typ argument, which is a "resource" // in the ACME spec terms. @@ -619,14 +644,14 @@ func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Accoun req.Contact = acct.Contact req.Agreement = acct.AgreedTerms } - res, err := c.retryPostJWS(ctx, c.Key, url, req) + res, err := c.post(ctx, c.Key, url, req, wantStatus( + http.StatusOK, // updates and deletes + http.StatusCreated, // new account creation + )) if err != nil { return nil, err } defer res.Body.Close() - if res.StatusCode < 200 || res.StatusCode > 299 { - return nil, responseError(res) - } var v struct { Contact []string @@ -656,59 +681,6 @@ func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Accoun }, nil } -// retryPostJWS will retry calls to postJWS if there is a badNonce error, -// clearing the stored nonces after each error. -// If the response was 4XX-5XX, then responseError is called on the body, -// the body is closed, and the error returned. -func (c *Client) retryPostJWS(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, error) { - sleep := sleeper(ctx) - for { - res, err := c.postJWS(ctx, key, url, body) - if err != nil { - return nil, err - } - // handle errors 4XX-5XX with responseError - if res.StatusCode >= 400 && res.StatusCode <= 599 { - err := responseError(res) - res.Body.Close() - // according to spec badNonce is urn:ietf:params:acme:error:badNonce - // however, acme servers in the wild return their version of the error - // https://tools.ietf.org/html/draft-ietf-acme-acme-02#section-5.4 - if ae, ok := err.(*Error); ok && strings.HasSuffix(strings.ToLower(ae.ProblemType), ":badnonce") { - // clear any nonces that we might've stored that might now be - // considered bad - c.clearNonces() - retry := res.Header.Get("Retry-After") - if err := sleep(retry, 1); err != nil { - return nil, err - } - continue - } - return nil, err - } - return res, nil - } -} - -// postJWS signs the body with the given key and POSTs it to the provided url. -// The body argument must be JSON-serializable. -func (c *Client) postJWS(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, error) { - nonce, err := c.popNonce(ctx, url) - if err != nil { - return nil, err - } - b, err := jwsEncodeJSON(body, key, nonce) - if err != nil { - return nil, err - } - res, err := c.post(ctx, url, "application/jose+json", bytes.NewReader(b)) - if err != nil { - return nil, err - } - c.addNonce(res.Header) - return res, nil -} - // popNonce returns a nonce value previously stored with c.addNonce // or fetches a fresh one from the given URL. func (c *Client) popNonce(ctx context.Context, url string) (string, error) { @@ -749,58 +721,12 @@ func (c *Client) addNonce(h http.Header) { c.nonces[v] = struct{}{} } -func (c *Client) httpClient() *http.Client { - if c.HTTPClient != nil { - return c.HTTPClient - } - return http.DefaultClient -} - -func (c *Client) get(ctx context.Context, urlStr string) (*http.Response, error) { - req, err := http.NewRequest("GET", urlStr, nil) - if err != nil { - return nil, err - } - return c.do(ctx, req) -} - -func (c *Client) head(ctx context.Context, urlStr string) (*http.Response, error) { - req, err := http.NewRequest("HEAD", urlStr, nil) - if err != nil { - return nil, err - } - return c.do(ctx, req) -} - -func (c *Client) post(ctx context.Context, urlStr, contentType string, body io.Reader) (*http.Response, error) { - req, err := http.NewRequest("POST", urlStr, body) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", contentType) - return c.do(ctx, req) -} - -func (c *Client) do(ctx context.Context, req *http.Request) (*http.Response, error) { - res, err := c.httpClient().Do(req.WithContext(ctx)) +func (c *Client) fetchNonce(ctx context.Context, url string) (string, error) { + r, err := http.NewRequest("HEAD", url, nil) if err != nil { - select { - case <-ctx.Done(): - // Prefer the unadorned context error. - // (The acme package had tests assuming this, previously from ctxhttp's - // behavior, predating net/http supporting contexts natively) - // TODO(bradfitz): reconsider this in the future. But for now this - // requires no test updates. - return nil, ctx.Err() - default: - return nil, err - } + return "", err } - return res, nil -} - -func (c *Client) fetchNonce(ctx context.Context, url string) (string, error) { - resp, err := c.head(ctx, url) + resp, err := c.doNoRetry(ctx, r) if err != nil { return "", err } @@ -852,24 +778,6 @@ func (c *Client) responseCert(ctx context.Context, res *http.Response, bundle bo return cert, nil } -// responseError creates an error of Error type from resp. -func responseError(resp *http.Response) error { - // don't care if ReadAll returns an error: - // json.Unmarshal will fail in that case anyway - b, _ := ioutil.ReadAll(resp.Body) - e := &wireError{Status: resp.StatusCode} - if err := json.Unmarshal(b, e); err != nil { - // this is not a regular error response: - // populate detail with anything we received, - // e.Status will already contain HTTP response code value - e.Detail = string(b) - if e.Detail == "" { - e.Detail = resp.Status - } - } - return e.error(resp.Header) -} - // 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. @@ -880,14 +788,11 @@ func (c *Client) chainCert(ctx context.Context, url string, depth int) ([][]byte return nil, errors.New("acme: certificate chain is too deep") } - res, err := c.get(ctx, url) + res, err := c.get(ctx, url, wantStatus(http.StatusOK)) if err != nil { return nil, err } defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return nil, responseError(res) - } b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1)) if err != nil { return nil, err @@ -932,65 +837,6 @@ func linkHeader(h http.Header, rel string) []string { return links } -// sleeper returns a function that accepts the Retry-After HTTP header value -// and an increment that's used with backoff to increasingly sleep on -// consecutive calls until the context is done. If the Retry-After header -// cannot be parsed, then backoff is used with a maximum sleep time of 10 -// seconds. -func sleeper(ctx context.Context) func(ra string, inc int) error { - var count int - return func(ra string, inc int) error { - count += inc - d := backoff(count, 10*time.Second) - d = retryAfter(ra, d) - wakeup := time.NewTimer(d) - defer wakeup.Stop() - select { - case <-ctx.Done(): - return ctx.Err() - case <-wakeup.C: - return nil - } - } -} - -// retryAfter parses a Retry-After HTTP header value, -// trying to convert v into an int (seconds) or use http.ParseTime otherwise. -// It returns d if v cannot be parsed. -func retryAfter(v string, d time.Duration) time.Duration { - if i, err := strconv.Atoi(v); err == nil { - return time.Duration(i) * time.Second - } - t, err := http.ParseTime(v) - if err != nil { - return d - } - return t.Sub(timeNow()) -} - -// backoff computes a duration after which an n+1 retry iteration should occur -// using truncated exponential backoff algorithm. -// -// The n argument is always bounded between 0 and 30. -// The max argument defines upper bound for the returned value. -func backoff(n int, max time.Duration) time.Duration { - if n < 0 { - n = 0 - } - if n > 30 { - n = 30 - } - var d time.Duration - if x, err := rand.Int(rand.Reader, big.NewInt(1000)); err == nil { - d = time.Duration(x.Int64()) * time.Millisecond - } - d += time.Duration(1<<uint(n)) * time.Second - if d > max { - return max - } - return d -} - // keyAuth generates a key authorization string for a given token. func keyAuth(pub crypto.PublicKey, token string) (string, error) { th, err := JWKThumbprint(pub) @@ -1000,15 +846,25 @@ func keyAuth(pub crypto.PublicKey, token string) (string, error) { return fmt.Sprintf("%s.%s", token, th), nil } +// defaultTLSChallengeCertTemplate is a template used to create challenge certs for TLS challenges. +func defaultTLSChallengeCertTemplate() *x509.Certificate { + return &x509.Certificate{ + SerialNumber: big.NewInt(1), + NotBefore: time.Now(), + NotAfter: time.Now().Add(24 * time.Hour), + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + } +} + // tlsChallengeCert creates a temporary certificate for TLS-SNI challenges // with the given SANs and auto-generated public/private key pair. // The Subject Common Name is set to the first SAN to aid debugging. // To create a cert with a custom key pair, specify WithKey option. func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { - var ( - key crypto.Signer - tmpl *x509.Certificate - ) + var key crypto.Signer + tmpl := defaultTLSChallengeCertTemplate() for _, o := range opt { switch o := o.(type) { case *certOptKey: @@ -1017,7 +873,7 @@ func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { } key = o.key case *certOptTemplate: - var t = *(*x509.Certificate)(o) // shallow copy is ok + t := *(*x509.Certificate)(o) // shallow copy is ok tmpl = &t default: // package's fault, if we let this happen: @@ -1030,16 +886,6 @@ func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { return tls.Certificate{}, err } } - if tmpl == nil { - tmpl = &x509.Certificate{ - SerialNumber: big.NewInt(1), - NotBefore: time.Now(), - NotAfter: time.Now().Add(24 * time.Hour), - BasicConstraintsValid: true, - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - } - } tmpl.DNSNames = san if len(san) > 0 { tmpl.Subject.CommonName = san[0] diff --git a/vendor/golang.org/x/crypto/acme/http.go b/vendor/golang.org/x/crypto/acme/http.go new file mode 100644 index 0000000..a43ce6a --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/http.go @@ -0,0 +1,281 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "bytes" + "context" + "crypto" + "crypto/rand" + "encoding/json" + "fmt" + "io/ioutil" + "math/big" + "net/http" + "strconv" + "strings" + "time" +) + +// retryTimer encapsulates common logic for retrying unsuccessful requests. +// It is not safe for concurrent use. +type retryTimer struct { + // backoffFn provides backoff delay sequence for retries. + // See Client.RetryBackoff doc comment. + backoffFn func(n int, r *http.Request, res *http.Response) time.Duration + // n is the current retry attempt. + n int +} + +func (t *retryTimer) inc() { + t.n++ +} + +// backoff pauses the current goroutine as described in Client.RetryBackoff. +func (t *retryTimer) backoff(ctx context.Context, r *http.Request, res *http.Response) error { + d := t.backoffFn(t.n, r, res) + if d <= 0 { + return fmt.Errorf("acme: no more retries for %s; tried %d time(s)", r.URL, t.n) + } + wakeup := time.NewTimer(d) + defer wakeup.Stop() + select { + case <-ctx.Done(): + return ctx.Err() + case <-wakeup.C: + return nil + } +} + +func (c *Client) retryTimer() *retryTimer { + f := c.RetryBackoff + if f == nil { + f = defaultBackoff + } + return &retryTimer{backoffFn: f} +} + +// defaultBackoff provides default Client.RetryBackoff implementation +// using a truncated exponential backoff algorithm, +// as described in Client.RetryBackoff. +// +// The n argument is always bounded between 1 and 30. +// The returned value is always greater than 0. +func defaultBackoff(n int, r *http.Request, res *http.Response) time.Duration { + const max = 10 * time.Second + var jitter time.Duration + if x, err := rand.Int(rand.Reader, big.NewInt(1000)); err == nil { + // Set the minimum to 1ms to avoid a case where + // an invalid Retry-After value is parsed into 0 below, + // resulting in the 0 returned value which would unintentionally + // stop the retries. + jitter = (1 + time.Duration(x.Int64())) * time.Millisecond + } + if v, ok := res.Header["Retry-After"]; ok { + return retryAfter(v[0]) + jitter + } + + if n < 1 { + n = 1 + } + if n > 30 { + n = 30 + } + d := time.Duration(1<<uint(n-1))*time.Second + jitter + if d > max { + return max + } + return d +} + +// retryAfter parses a Retry-After HTTP header value, +// trying to convert v into an int (seconds) or use http.ParseTime otherwise. +// It returns zero value if v cannot be parsed. +func retryAfter(v string) time.Duration { + if i, err := strconv.Atoi(v); err == nil { + return time.Duration(i) * time.Second + } + t, err := http.ParseTime(v) + if err != nil { + return 0 + } + return t.Sub(timeNow()) +} + +// resOkay is a function that reports whether the provided response is okay. +// It is expected to keep the response body unread. +type resOkay func(*http.Response) bool + +// wantStatus returns a function which reports whether the code +// matches the status code of a response. +func wantStatus(codes ...int) resOkay { + return func(res *http.Response) bool { + for _, code := range codes { + if code == res.StatusCode { + return true + } + } + return false + } +} + +// get issues an unsigned GET request to the specified URL. +// It returns a non-error value only when ok reports true. +// +// get retries unsuccessful attempts according to c.RetryBackoff +// until the context is done or a non-retriable error is received. +func (c *Client) get(ctx context.Context, url string, ok resOkay) (*http.Response, error) { + retry := c.retryTimer() + for { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + res, err := c.doNoRetry(ctx, req) + switch { + case err != nil: + return nil, err + case ok(res): + return res, nil + case isRetriable(res.StatusCode): + retry.inc() + resErr := responseError(res) + res.Body.Close() + // Ignore the error value from retry.backoff + // and return the one from last retry, as received from the CA. + if retry.backoff(ctx, req, res) != nil { + return nil, resErr + } + default: + defer res.Body.Close() + return nil, responseError(res) + } + } +} + +// post issues a signed POST request in JWS format using the provided key +// to the specified URL. +// It returns a non-error value only when ok reports true. +// +// post retries unsuccessful attempts according to c.RetryBackoff +// until the context is done or a non-retriable error is received. +// It uses postNoRetry to make individual requests. +func (c *Client) post(ctx context.Context, key crypto.Signer, url string, body interface{}, ok resOkay) (*http.Response, error) { + retry := c.retryTimer() + for { + res, req, err := c.postNoRetry(ctx, key, url, body) + if err != nil { + return nil, err + } + if ok(res) { + return res, nil + } + resErr := responseError(res) + res.Body.Close() + switch { + // Check for bad nonce before isRetriable because it may have been returned + // with an unretriable response code such as 400 Bad Request. + case isBadNonce(resErr): + // Consider any previously stored nonce values to be invalid. + c.clearNonces() + case !isRetriable(res.StatusCode): + return nil, resErr + } + retry.inc() + // Ignore the error value from retry.backoff + // and return the one from last retry, as received from the CA. + if err := retry.backoff(ctx, req, res); err != nil { + return nil, resErr + } + } +} + +// postNoRetry signs the body with the given key and POSTs it to the provided url. +// The body argument must be JSON-serializable. +// It is used by c.post to retry unsuccessful attempts. +func (c *Client) postNoRetry(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, *http.Request, error) { + nonce, err := c.popNonce(ctx, url) + if err != nil { + return nil, nil, err + } + b, err := jwsEncodeJSON(body, key, nonce) + if err != nil { + return nil, nil, err + } + req, err := http.NewRequest("POST", url, bytes.NewReader(b)) + if err != nil { + return nil, nil, err + } + req.Header.Set("Content-Type", "application/jose+json") + res, err := c.doNoRetry(ctx, req) + if err != nil { + return nil, nil, err + } + c.addNonce(res.Header) + return res, req, nil +} + +// doNoRetry issues a request req, replacing its context (if any) with ctx. +func (c *Client) doNoRetry(ctx context.Context, req *http.Request) (*http.Response, error) { + res, err := c.httpClient().Do(req.WithContext(ctx)) + if err != nil { + select { + case <-ctx.Done(): + // Prefer the unadorned context error. + // (The acme package had tests assuming this, previously from ctxhttp's + // behavior, predating net/http supporting contexts natively) + // TODO(bradfitz): reconsider this in the future. But for now this + // requires no test updates. + return nil, ctx.Err() + default: + return nil, err + } + } + return res, nil +} + +func (c *Client) httpClient() *http.Client { + if c.HTTPClient != nil { + return c.HTTPClient + } + return http.DefaultClient +} + +// isBadNonce reports whether err is an ACME "badnonce" error. +func isBadNonce(err error) bool { + // According to the spec badNonce is urn:ietf:params:acme:error:badNonce. + // However, ACME servers in the wild return their versions of the error. + // See https://tools.ietf.org/html/draft-ietf-acme-acme-02#section-5.4 + // and https://github.com/letsencrypt/boulder/blob/0e07eacb/docs/acme-divergences.md#section-66. + ae, ok := err.(*Error) + return ok && strings.HasSuffix(strings.ToLower(ae.ProblemType), ":badnonce") +} + +// isRetriable reports whether a request can be retried +// based on the response status code. +// +// Note that a "bad nonce" error is returned with a non-retriable 400 Bad Request code. +// Callers should parse the response and check with isBadNonce. +func isRetriable(code int) bool { + return code <= 399 || code >= 500 || code == http.StatusTooManyRequests +} + +// responseError creates an error of Error type from resp. +func responseError(resp *http.Response) error { + // don't care if ReadAll returns an error: + // json.Unmarshal will fail in that case anyway + b, _ := ioutil.ReadAll(resp.Body) + e := &wireError{Status: resp.StatusCode} + if err := json.Unmarshal(b, e); err != nil { + // this is not a regular error response: + // populate detail with anything we received, + // e.Status will already contain HTTP response code value + e.Detail = string(b) + if e.Detail == "" { + e.Detail = resp.Status + } + } + return e.error(resp.Header) +} diff --git a/vendor/golang.org/x/crypto/acme/types.go b/vendor/golang.org/x/crypto/acme/types.go index 3e19974..54792c0 100644 --- a/vendor/golang.org/x/crypto/acme/types.go +++ b/vendor/golang.org/x/crypto/acme/types.go @@ -104,7 +104,7 @@ func RateLimit(err error) (time.Duration, bool) { if e.Header == nil { return 0, true } - return retryAfter(e.Header.Get("Retry-After"), 0), true + return retryAfter(e.Header.Get("Retry-After")), true } // Account is a user account. It is associated with a private key. @@ -296,8 +296,8 @@ func (e *wireError) error(h http.Header) *Error { } } -// CertOption is an optional argument type for the TLSSNIxChallengeCert methods for -// customizing a temporary certificate for TLS-SNI challenges. +// CertOption is an optional argument type for the TLS ChallengeCert methods for +// customizing a temporary certificate for TLS-based challenges. type CertOption interface { privateCertOpt() } @@ -317,7 +317,7 @@ func (*certOptKey) privateCertOpt() {} // WithTemplate creates an option for specifying a certificate template. // See x509.CreateCertificate for template usage details. // -// In TLSSNIxChallengeCert methods, the template is also used as parent, +// In TLS ChallengeCert methods, the template is also used as parent, // resulting in a self-signed certificate. // The DNSNames field of t is always overwritten for tls-sni challenge certs. func WithTemplate(t *x509.Certificate) CertOption { diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE index 8dada3e..866d74a 100644 --- a/vendor/gopkg.in/yaml.v2/LICENSE +++ b/vendor/gopkg.in/yaml.v2/LICENSE @@ -1,201 +1,13 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Copyright 2011-2016 Canonical Ltd. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - 1. Definitions. + http://www.apache.org/licenses/LICENSE-2.0 - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vendor/vendor.json b/vendor/vendor.json index ab8aecf..52086fd 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -3,28 +3,28 @@ "ignore": "test", "package": [ { - "checksumSHA1": "gHJY2xf5fdCTGbBUf+QQba30lPA=", + "checksumSHA1": "raJx5BjBbVQG0ylGSjPpi+JvqjU=", "path": "git.autistici.org/ai3/go-common", - "revision": "1c931821c1fcd47c904e85850c1b4c811148c28f", - "revisionTime": "2018-05-24T08:55:40Z" + "revision": "39b1908a9e399db1a0ceebb0fe4f3d3c35298357", + "revisionTime": "2018-08-17T06:38:25Z" }, { - "checksumSHA1": "o+rWKVQIDy79ZwrItwa5/whAL6g=", + "checksumSHA1": "49MChcx9D+/+pCyl/F469TcQcK4=", "path": "git.autistici.org/ai3/go-common/clientutil", - "revision": "1c931821c1fcd47c904e85850c1b4c811148c28f", - "revisionTime": "2018-05-24T08:55:40Z" + "revision": "39b1908a9e399db1a0ceebb0fe4f3d3c35298357", + "revisionTime": "2018-08-17T06:38:25Z" }, { "checksumSHA1": "7VBLbwaK1m/jwsk8sLsh4iD9T/s=", "path": "git.autistici.org/ai3/go-common/serverutil", - "revision": "1c931821c1fcd47c904e85850c1b4c811148c28f", - "revisionTime": "2018-05-24T08:55:40Z" + "revision": "39b1908a9e399db1a0ceebb0fe4f3d3c35298357", + "revisionTime": "2018-08-17T06:38:25Z" }, { - "checksumSHA1": "QZLvJV+CttBnZ0wK5D3XlKjKq0I=", + "checksumSHA1": "zCVstnZ23vTfA6oKC389y6Opglw=", "path": "git.autistici.org/ai3/replds", - "revision": "47130d7caf4b0cfc8c445cdeee0d993a779ece60", - "revisionTime": "2018-05-24T08:58:05Z" + "revision": "a60c057e6e543d8842e83cbdd770350a4228fa2a", + "revisionTime": "2018-08-17T07:17:02Z" }, { "checksumSHA1": "spyv5/YFBjYyZLZa1U2LBfDR8PM=", @@ -33,22 +33,22 @@ "revisionTime": "2016-08-04T10:47:26Z" }, { - "checksumSHA1": "hTThB1Cw2ue02RD5Oig4eu1Dkzk=", + "checksumSHA1": "EAUmmJ4ccZbyuyf8Fnf+KU+DH3w=", "path": "github.com/cenkalti/backoff", - "revision": "309aa717adbf351e92864cbedf9cca0b769a4b5a", - "revisionTime": "2017-10-07T11:45:50Z" + "revision": "b7325b0f3f1097c6546ea5e83c4a23267e58ad71", + "revisionTime": "2018-08-01T15:21:24Z" }, { "checksumSHA1": "+Zz+leZHHC9C0rx8DoRuffSRPso=", "path": "github.com/coreos/go-systemd/daemon", - "revision": "d2196463941895ee908e13531a23a39feb9e1243", - "revisionTime": "2017-07-31T11:19:25Z" + "revision": "1f9909e51b2dab2487c26d64c8f2e7e580e4c9f5", + "revisionTime": "2017-03-24T09:58:19Z" }, { - "checksumSHA1": "Pyou8mceOASSFxc7GeXZuVdSMi0=", + "checksumSHA1": "yqF125xVSkmfLpIVGrLlfE05IUk=", "path": "github.com/golang/protobuf/proto", - "revision": "b4deda0973fb4c70b50d226b1af49f3da59f5265", - "revisionTime": "2018-04-30T18:52:41Z" + "revision": "1e59b77b52bf8e4b449a57e6f79f21226d571845", + "revisionTime": "2017-11-13T18:07:20Z" }, { "checksumSHA1": "t1nayUUugNoJWht7p4cbKyWuk8Q=", @@ -62,41 +62,47 @@ "revision": "c12348ce28de40eed0136aa2b644d0ee0650e56c", "revisionTime": "2016-04-24T11:30:07Z" }, + { + "checksumSHA1": "Ovc3HTFXmFFlk8i1tf+4hEu3bx4=", + "path": "github.com/miekg/dns", + "revision": "874ec871288a738d8d87fd5cec1dd71e88fdacb2", + "revisionTime": "2015-09-23T21:02:39Z" + }, { "checksumSHA1": "hu0MsbTdFzZxNRyAxe2HmTFFFak=", "path": "github.com/prometheus/client_golang/prometheus", - "revision": "5cec1d0429b02e4323e042eb04dafdb079ddf568", - "revisionTime": "2017-10-05T11:29:15Z" + "revision": "661e31bf844dfca9aeba15f27ea8aa0d485ad212", + "revisionTime": "2017-12-01T12:22:22Z" }, { "checksumSHA1": "wsAkYlRRUNx+OAuUOIqdjO7dICM=", "path": "github.com/prometheus/client_golang/prometheus/promhttp", - "revision": "5cec1d0429b02e4323e042eb04dafdb079ddf568", - "revisionTime": "2017-10-05T11:29:15Z" + "revision": "661e31bf844dfca9aeba15f27ea8aa0d485ad212", + "revisionTime": "2017-12-01T12:22:22Z" }, { "checksumSHA1": "DvwvOlPNAgRntBzt3b3OSRMS2N4=", "path": "github.com/prometheus/client_model/go", - "revision": "6f3806018612930941127f2a7c6c453ba2c527d2", - "revisionTime": "2017-02-16T18:52:47Z" + "revision": "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c", + "revisionTime": "2017-11-17T10:05:41Z" }, { "checksumSHA1": "xfnn0THnqNwjwimeTClsxahYrIo=", "path": "github.com/prometheus/common/expfmt", - "revision": "e3fb1a1acd7605367a2b378bc2e2f893c05174b7", - "revisionTime": "2017-11-04T09:59:07Z" + "revision": "2e54d0b93cba2fd133edc32211dcc32c06ef72ca", + "revisionTime": "2017-11-17T16:30:51Z" }, { "checksumSHA1": "GWlM3d2vPYyNATtTFgftS10/A9w=", "path": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - "revision": "e3fb1a1acd7605367a2b378bc2e2f893c05174b7", - "revisionTime": "2017-11-04T09:59:07Z" + "revision": "2e54d0b93cba2fd133edc32211dcc32c06ef72ca", + "revisionTime": "2017-11-17T16:30:51Z" }, { - "checksumSHA1": "3VoqH7TFfzA6Ds0zFzIbKCUvBmw=", + "checksumSHA1": "YU+/K48IMawQnToO4ETE6a+hhj4=", "path": "github.com/prometheus/common/model", - "revision": "e3fb1a1acd7605367a2b378bc2e2f893c05174b7", - "revisionTime": "2017-11-04T09:59:07Z" + "revision": "2e54d0b93cba2fd133edc32211dcc32c06ef72ca", + "revisionTime": "2017-11-17T16:30:51Z" }, { "checksumSHA1": "pW1yt1G1J9jnQMCxr1TDI7LQr3s=", @@ -111,22 +117,22 @@ "revisionTime": "2017-10-17T21:40:25Z" }, { - "checksumSHA1": "zHLlCNnnX/KNVue2tHr+FWxbszA=", + "checksumSHA1": "FBc8PNxDwtV1tPS4LzJAX2oGNqM=", "path": "golang.org/x/crypto/acme", - "revision": "4ec37c66abab2c7e02ae775328b2ff001c3f025a", - "revisionTime": "2018-05-05T00:22:42Z" + "revision": "a49355c7e3f8fe157a85be2f77e6e269a0f89602", + "revisionTime": "2018-06-20T09:14:27Z" }, { "checksumSHA1": "GtamqiJoL7PGHsN454AoffBFMa8=", "path": "golang.org/x/net/context", - "revision": "f73e4c9ed3b7ebdd5f699a16a880c2b1994e50dd", - "revisionTime": "2018-05-08T00:58:03Z" + "revision": "c39426892332e1bb5ec0a434a079bf82f5d30c54", + "revisionTime": "2018-07-15T06:54:04Z" }, { - "checksumSHA1": "RDJpJQwkF012L6m/2BJizyOksNw=", + "checksumSHA1": "o20lmjzBQyKD5LfLZ3OhUoMkLds=", "path": "gopkg.in/yaml.v2", - "revision": "eb3733d160e74a9c7e442f435eb3bea458e1d19f", - "revisionTime": "2017-08-12T16:00:11Z" + "revision": "25c4ec802a7d637f88d584ab26798e94ad14c13b", + "revisionTime": "2017-07-21T12:20:51Z" } ], "rootPath": "git.autistici.org/ai3/acmeserver" -- GitLab