diff options
author | 2017-07-24 23:12:50 +0200 | |
---|---|---|
committer | 2017-07-24 14:12:50 -0700 | |
commit | 1b7492be6e07f4b8306c0b4a56d79f37485ae61c (patch) | |
tree | 02510da5a7cf228821373a8090bac29055764aba /vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go | |
parent | f33b02689c564c1de8774f7f99d2400231a76069 (diff) | |
download | coredns-1b7492be6e07f4b8306c0b4a56d79f37485ae61c.tar.gz coredns-1b7492be6e07f4b8306c0b4a56d79f37485ae61c.tar.zst coredns-1b7492be6e07f4b8306c0b4a56d79f37485ae61c.zip |
WIP: middleware/dnstap (#711)
middleware/dnstap add
Diffstat (limited to 'vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go')
-rw-r--r-- | vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go b/vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go new file mode 100644 index 000000000..5d58aa5b6 --- /dev/null +++ b/vendor/github.com/dnstap/golang-dnstap/FrameStreamInput.go @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013-2014 by Farsight Security, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dnstap + +import ( + "io" + "log" + "os" + + "github.com/farsightsec/golang-framestream" +) + +type FrameStreamInput struct { + wait chan bool + decoder *framestream.Decoder +} + +func NewFrameStreamInput(r io.ReadWriter, bi bool) (input *FrameStreamInput, err error) { + input = new(FrameStreamInput) + decoderOptions := framestream.DecoderOptions{ + ContentType: FSContentType, + Bidirectional: bi, + } + input.decoder, err = framestream.NewDecoder(r, &decoderOptions) + if err != nil { + return + } + input.wait = make(chan bool) + return +} + +func NewFrameStreamInputFromFilename(fname string) (input *FrameStreamInput, err error) { + file, err := os.Open(fname) + if err != nil { + return nil, err + } + input, err = NewFrameStreamInput(file, false) + return +} + +func (input *FrameStreamInput) ReadInto(output chan []byte) { + for { + buf, err := input.decoder.Decode() + if err != nil { + if err != io.EOF { + log.Printf("framestream.Decoder.Decode() failed: %s\n", err) + } + break + } + newbuf := make([]byte, len(buf)) + copy(newbuf, buf) + output <- newbuf + } + close(input.wait) +} + +func (input *FrameStreamInput) Wait() { + <-input.wait +} |