Files
adsb-tools/sinks/adsb-ws/input.go
2016-03-10 17:54:32 -08:00

60 lines
930 B
Go

package main
import (
"bufio"
"errors"
"log"
"os"
)
func decodeVarint(r *bufio.Reader) (n uint64, err error) {
var value uint64
var shift uint16
for {
c, err := r.ReadByte()
if err != nil {
return 0, err
}
value |= (uint64(c) & 0x7f) << shift
if c & 0x80 == 0 {
return value, nil
}
shift += 7
if shift > 21 {
return 0, errors.New("invalid varint")
}
}
}
func readInput() {
r := bufio.NewReader(os.Stdin)
for {
c, err := r.ReadByte()
if err != nil {
log.Printf("error: %v", err)
break
}
if c != 0x0a {
log.Printf("invalid message type: %v", c)
break
}
msglen, err := decodeVarint(r)
if err != nil {
log.Printf("error: %v", err)
break
}
buf := make([]byte, msglen)
n, err := r.Read(buf)
if err != nil {
log.Printf("error: %v", err)
break
}
if uint64(n) != msglen {
log.Printf("short read")
break
}
log.Println(buf)
}
os.Exit(1)
}