mirror of
https://github.com/go-i2p/go-i2cp.git
synced 2025-06-07 09:03:31 -04:00
118 lines
2.2 KiB
Go
118 lines
2.2 KiB
Go
package go_i2cp
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"os"
|
|
)
|
|
|
|
type Stream struct {
|
|
*bytes.Buffer
|
|
}
|
|
|
|
func NewStream(buf []byte) (s *Stream) {
|
|
return &Stream{bytes.NewBuffer(buf)}
|
|
}
|
|
func (s *Stream) ReadUint16() (r uint16, err error) {
|
|
bts := make([]byte, 2)
|
|
_, err = s.Read(bts)
|
|
r = binary.LittleEndian.Uint16(bts)
|
|
return
|
|
}
|
|
func (s *Stream) ReadUint32() (r uint32, err error) {
|
|
bts := make([]byte, 4)
|
|
_, err = s.Read(bts)
|
|
r = binary.LittleEndian.Uint32(bts)
|
|
return
|
|
}
|
|
func (s *Stream) ReadUint64() (r uint64, err error) {
|
|
bts := make([]byte, 8)
|
|
_, err = s.Read(bts)
|
|
r = binary.LittleEndian.Uint64(bts)
|
|
return
|
|
}
|
|
|
|
func (s *Stream) WriteUint16(i uint16) (err error) {
|
|
bts := make([]byte, 2)
|
|
binary.LittleEndian.PutUint16(bts, i)
|
|
_, err = s.Write(bts)
|
|
return
|
|
}
|
|
func (s *Stream) WriteUint32(i uint32) (err error) {
|
|
bts := make([]byte, 4)
|
|
binary.LittleEndian.PutUint32(bts, i)
|
|
_, err = s.Write(bts)
|
|
return
|
|
}
|
|
func (s *Stream) WriteUint64(i uint64) (err error) {
|
|
bts := make([]byte, 8)
|
|
binary.LittleEndian.PutUint64(bts, i)
|
|
_, err = s.Write(bts)
|
|
return
|
|
}
|
|
func (s *Stream) loadFile(f *os.File) (err error) {
|
|
_, err = f.Read(s.Bytes())
|
|
return
|
|
}
|
|
|
|
func (s *Stream) ChLen(len int) {
|
|
byt := s.Bytes()
|
|
byt = byt[:len]
|
|
}
|
|
|
|
/*type Stream struct {
|
|
data []byte
|
|
size uint32
|
|
p uint32
|
|
end uint32
|
|
}
|
|
|
|
func (s *Stream) Init(len uint32) {
|
|
data := make([]byte, len)
|
|
s.data = data
|
|
s.size = len
|
|
s.Reset()
|
|
}
|
|
|
|
func (s *Stream) Reset() {
|
|
s.end = s.size - 1
|
|
s.p = 0
|
|
}
|
|
|
|
func (s *Stream) Seek(a uint32) {
|
|
s.p = a
|
|
}
|
|
func (s *Stream) Advance() {
|
|
s.p += 1
|
|
}
|
|
func (s *Stream) Tell() uint32 { return s.p }
|
|
func (s *Stream) MarkEnd() { s.end = s.p}
|
|
func (s *Stream) Eof() bool { return s.end < s.p}
|
|
func (s *Stream) Debug() {fmt.Printf("STREAM: data %p size %d p %d end %d", s.data, s.size, s.p, s.end)}
|
|
func (s *Stream) Check(len uint32) {
|
|
if (s.p + len) > s.size {
|
|
s.Debug()
|
|
// TODO better error message
|
|
os.Exit(2)
|
|
}
|
|
}
|
|
func (s *Stream) Dump(file os.File) {
|
|
file.Write(s.data)
|
|
defer file.Close()
|
|
}
|
|
func (s *Stream) Skip(n uint32) {
|
|
s.Check(n)
|
|
s.p += n
|
|
}
|
|
func (s *Stream) ReadUint8() uint8 {
|
|
s.Check(1)
|
|
defer s.Advance()
|
|
return s.data[s.p]
|
|
}
|
|
func (s *Stream) ReadUint8p(len uint32) []uint8 {
|
|
s.Check(len)
|
|
defer s.Skip(len)
|
|
return s.data[s.p:len]
|
|
}
|
|
*/
|