added some dhcp4 packet functions and generic byte reading functions
This commit is contained in:
47
haza.go
47
haza.go
@ -1,5 +1,9 @@
|
||||
package haza
|
||||
|
||||
import "bytes"
|
||||
import "encoding/binary"
|
||||
import "io"
|
||||
import "net"
|
||||
import "sync"
|
||||
import "unsafe"
|
||||
|
||||
@ -75,3 +79,46 @@ func Ntoh32(v uint32) uint32 {
|
||||
if _is_big_endian { return v }
|
||||
return ((v >> 24) & 0xFF) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
type ByteReader struct {
|
||||
r *bytes.Reader
|
||||
}
|
||||
|
||||
func NewByteReader(b []byte) *ByteReader {
|
||||
return &ByteReader{ r: bytes.NewReader(b) }
|
||||
}
|
||||
|
||||
func (br* ByteReader) ReadByte() (byte, error) {
|
||||
return br.r.ReadByte()
|
||||
}
|
||||
|
||||
func (br* ByteReader) ReadUint16() (uint16, error) {
|
||||
var v uint16
|
||||
var err error
|
||||
err = binary.Read(br.r, binary.BigEndian, &v)
|
||||
if err != nil { return 0, err }
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func (br* ByteReader) ReadUint32() (uint32, error) {
|
||||
var v uint32
|
||||
var err error
|
||||
err = binary.Read(br.r, binary.BigEndian, &v)
|
||||
if err != nil { return 0, err }
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func (br* ByteReader) ReadIp4() (net.IP, error) {
|
||||
var buf [4]byte
|
||||
var err error
|
||||
_, err = io.ReadFull(br.r, buf[:])
|
||||
if err != nil { return nil, err }
|
||||
return net.IP(buf[:]), nil
|
||||
}
|
||||
|
||||
func (br *ByteReader) ReadAllBytes(buf []byte) error {
|
||||
var err error
|
||||
_, err = io.ReadFull(br.r, buf)
|
||||
return err
|
||||
}
|
||||
|
Reference in New Issue
Block a user