A working proxy exists.

This commit is contained in:
2021-02-27 22:25:50 +01:00
parent ce94bf0d89
commit 617d7834cc
29 changed files with 781 additions and 195 deletions

View File

@@ -2,28 +2,31 @@ package ipp
import "encoding/binary"
type setOfStrings struct {
// SetOfStrings is the strings attribute
type SetOfStrings struct {
name string
values []string
vTag tag
}
func NewSetOfStrings(name string, t tag, values []string) *setOfStrings {
s := new(setOfStrings)
// NewSetOfStrings creates a new strings attribute
func NewSetOfStrings(name string, t tag, values []string) *SetOfStrings {
s := new(SetOfStrings)
s.name = name
s.vTag = t
s.values = values //make([]string, 0)
return s
}
func (s setOfStrings) String() string {
func (s SetOfStrings) String() string {
r := s.name + " :"
for _, v := range s.values {
r = r + " " + v
}
return r
}
func (s *setOfStrings) valueTag() tag {
func (s *SetOfStrings) valueTag() tag {
return s.vTag
}
@@ -39,7 +42,7 @@ func (s *setOfStrings) valueTag() tag {
// }
// }
func (s *setOfStrings) marshal() []byte {
func (s *SetOfStrings) marshal() []byte {
l := 5 + len(s.name) + len(s.values[0])
for i := range s.values[1:] {
l += 5 + len(s.values[i+1])
@@ -47,7 +50,7 @@ func (s *setOfStrings) marshal() []byte {
res := make([]byte, l)
p := 0
res[p] = byte(s.vTag)
p += 1
p++
binary.BigEndian.PutUint16(res[p:p+2], uint16(len(s.name)))
p += 2
copy(res[p:], []byte(s.name))
@@ -58,7 +61,7 @@ func (s *setOfStrings) marshal() []byte {
p += len(s.values[0])
for i := range s.values[1:] {
res[p] = byte(s.vTag)
p += 1
p++
binary.BigEndian.PutUint16(res[p:p+2], uint16(0))
p = p + 2
binary.BigEndian.PutUint16(res[p:p+2], uint16(len(s.values[i+1])))
@@ -70,11 +73,12 @@ func (s *setOfStrings) marshal() []byte {
return res
}
func (s *setOfStrings) AddValue(v string) {
// AddValue adds a new sring to the set
func (s *SetOfStrings) AddValue(v string) {
s.values = append(s.values, v)
}
func (s *setOfStrings) size() int {
func (s *SetOfStrings) size() int {
l := 1 + 2 // The value tag (0x44) + name-length field (2 bytes)
l += len(s.name)
l += 2 // value-length field (2 bytes)