Simplify unmarshalling.
This commit is contained in:
@@ -3,9 +3,9 @@
|
||||
package ipp
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -44,14 +44,44 @@ func (r *RangeOfInteger) marshal() []byte {
|
||||
return []byte{}
|
||||
}
|
||||
|
||||
func (r *RangeOfInteger) unmarshal(byteStream *bufio.Reader) error {
|
||||
var length uint16
|
||||
r.values = make([]IRange, 0, 1)
|
||||
binary.Read(byteStream, binary.BigEndian, &length)
|
||||
name := make([]byte, length)
|
||||
if length > 0 {
|
||||
binary.Read(byteStream, binary.BigEndian, name)
|
||||
}
|
||||
r.name = string(name)
|
||||
binary.Read(byteStream, binary.BigEndian, &length)
|
||||
if length != 8 {
|
||||
return fmt.Errorf("wrong value-length of range-of-integer attribute %v", length)
|
||||
}
|
||||
for length > 0 {
|
||||
var i IRange
|
||||
err := binary.Read(byteStream, binary.BigEndian, &i.lower)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = binary.Read(byteStream, binary.BigEndian, &i.upper)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
r.values = append(r.values, i)
|
||||
next, err := byteStream.Peek(3)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
if next[0] != byte(rangeOfIntegerValueTag) || next[1] != 0x00 || next[2] != 0x00 {
|
||||
break
|
||||
}
|
||||
// Remove the value tag with the zero length from the stream
|
||||
byteStream.Discard(3)
|
||||
binary.Read(byteStream, binary.BigEndian, &length)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *RangeOfInteger) addValue(v interface{}) {
|
||||
r.values = append(r.values, v.(IRange))
|
||||
}
|
||||
|
||||
func unmarshalSingleRangeOfInteger(byteStream io.Reader) (string, IRange) {
|
||||
name, data := unmarshalSingleAttribute(byteStream)
|
||||
var r IRange
|
||||
r.lower = int32(binary.BigEndian.Uint32(data[0:4]))
|
||||
r.upper = int32(binary.BigEndian.Uint32(data[4:8]))
|
||||
return name, r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user