aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/farsightsec/golang-framestream/Decoder.go
diff options
context:
space:
mode:
authorGravatar Yong Tang <yong.tang.github@outlook.com> 2019-03-03 11:56:26 -0800
committerGravatar GitHub <noreply@github.com> 2019-03-03 11:56:26 -0800
commit9d39ea51a7774cfbc680a99d9deafffecc26e295 (patch)
tree1187c5220082626e187ec4f37d486f2ceaa576b0 /vendor/github.com/farsightsec/golang-framestream/Decoder.go
parent39d94835ee6198d63e086e0b0c90b8ed347884b7 (diff)
downloadcoredns-9d39ea51a7774cfbc680a99d9deafffecc26e295.tar.gz
coredns-9d39ea51a7774cfbc680a99d9deafffecc26e295.tar.zst
coredns-9d39ea51a7774cfbc680a99d9deafffecc26e295.zip
Add `go mod` support (#2503)
* Remove vendor and go-dep Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Add go.mod Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Update Makefile and .travis.yml Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Diffstat (limited to 'vendor/github.com/farsightsec/golang-framestream/Decoder.go')
-rw-r--r--vendor/github.com/farsightsec/golang-framestream/Decoder.go154
1 files changed, 0 insertions, 154 deletions
diff --git a/vendor/github.com/farsightsec/golang-framestream/Decoder.go b/vendor/github.com/farsightsec/golang-framestream/Decoder.go
deleted file mode 100644
index e9cda8031..000000000
--- a/vendor/github.com/farsightsec/golang-framestream/Decoder.go
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 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 framestream
-
-import (
- "bufio"
- "encoding/binary"
- "io"
-)
-
-type DecoderOptions struct {
- MaxPayloadSize uint32
- ContentType []byte
- Bidirectional bool
-}
-
-type Decoder struct {
- buf []byte
- opt DecoderOptions
- reader *bufio.Reader
- writer *bufio.Writer
- stopped bool
-}
-
-func NewDecoder(r io.Reader, opt *DecoderOptions) (dec *Decoder, err error) {
- if opt == nil {
- opt = &DecoderOptions{}
- }
- if opt.MaxPayloadSize == 0 {
- opt.MaxPayloadSize = DEFAULT_MAX_PAYLOAD_SIZE
- }
- dec = &Decoder{
- buf: make([]byte, opt.MaxPayloadSize),
- opt: *opt,
- reader: bufio.NewReader(r),
- writer: nil,
- }
-
- var cf ControlFrame
- if opt.Bidirectional {
- w, ok := r.(io.Writer)
- if !ok {
- return dec, ErrType
- }
- dec.writer = bufio.NewWriter(w)
-
- // Read the ready control frame.
- err = cf.DecodeTypeEscape(dec.reader, CONTROL_READY)
- if err != nil {
- return
- }
-
- // Check content type.
- if !cf.MatchContentType(dec.opt.ContentType) {
- return dec, ErrContentTypeMismatch
- }
-
- // Send the accept control frame.
- accept := ControlAccept
- accept.SetContentType(dec.opt.ContentType)
- err = accept.EncodeFlush(dec.writer)
- if err != nil {
- return
- }
- }
-
- // Read the start control frame.
- err = cf.DecodeTypeEscape(dec.reader, CONTROL_START)
- if err != nil {
- return
- }
-
- // Check content type.
- if !cf.MatchContentType(dec.opt.ContentType) {
- return dec, ErrContentTypeMismatch
- }
-
- return
-}
-
-func (dec *Decoder) readFrame(frameLen uint32) (err error) {
- // Enforce limits on frame size.
- if frameLen > dec.opt.MaxPayloadSize {
- err = ErrDataFrameTooLarge
- return
- }
-
- // Read the frame.
- n, err := io.ReadFull(dec.reader, dec.buf[0:frameLen])
- if err != nil || uint32(n) != frameLen {
- return
- }
- return
-}
-
-func (dec *Decoder) Decode() (frameData []byte, err error) {
- if dec.stopped {
- err = EOF
- return
- }
-
- // Read the frame length.
- var frameLen uint32
- err = binary.Read(dec.reader, binary.BigEndian, &frameLen)
- if err != nil {
- return
- }
- if frameLen == 0 {
- // This is a control frame.
- var cf ControlFrame
- err = cf.Decode(dec.reader)
- if err != nil {
- return
- }
- if cf.ControlType == CONTROL_STOP {
- dec.stopped = true
- if dec.opt.Bidirectional {
- ff := &ControlFrame{ControlType: CONTROL_FINISH}
- err = ff.EncodeFlush(dec.writer)
- if err != nil {
- return
- }
- }
- return nil, EOF
- }
- if err != nil {
- return nil, err
- }
-
- } else {
- // This is a data frame.
- err = dec.readFrame(frameLen)
- if err != nil {
- return
- }
- frameData = dec.buf[0:frameLen]
- }
-
- return
-}