MCPcopy Create free account
hub / github.com/OpenPrinting/goipp / decode

Method decode

decoder.go:42–166  ·  view source on GitHub ↗

Decode the message

(m *Message)

Source from the content-addressed store, hash-verified

40
41// Decode the message
42func (md *messageDecoder) decode(m *Message) error {
43 // Wire format:
44 //
45 // 2 bytes: Version
46 // 2 bytes: Code (Operation or Status)
47 // 4 bytes: RequestID
48 // variable: attributes
49 // 1 byte: TagEnd
50
51 // Parse message header
52 var err error
53 m.Version, err = md.decodeVersion()
54 if err == nil {
55 m.Code, err = md.decodeCode()
56 }
57 if err == nil {
58 m.RequestID, err = md.decodeU32()
59 }
60
61 // Now parse attributes
62 done := false
63 var group *Attributes
64 var attr Attribute
65 var prev *Attribute
66
67 for err == nil && !done {
68 var tag Tag
69 tag, err = md.decodeTag()
70
71 if err != nil {
72 break
73 }
74
75 if tag.IsDelimiter() {
76 prev = nil
77 }
78
79 if tag.IsGroup() {
80 m.Groups.Add(Group{tag, nil})
81 }
82
83 switch tag {
84 case TagZero:
85 err = errors.New("Invalid tag 0")
86 case TagEnd:
87 done = true
88
89 case TagOperationGroup:
90 group = &m.Operation
91 case TagJobGroup:
92 group = &m.Job
93 case TagPrinterGroup:
94 group = &m.Printer
95 case TagUnsupportedGroup:
96 group = &m.Unsupported
97 case TagSubscriptionGroup:
98 group = &m.Subscription
99 case TagEventNotificationGroup:

Callers 1

DecodeExMethod · 0.95

Calls 10

decodeVersionMethod · 0.95
decodeCodeMethod · 0.95
decodeU32Method · 0.95
decodeTagMethod · 0.95
IsDelimiterMethod · 0.95
IsGroupMethod · 0.95
decodeAttributeMethod · 0.95
decodeCollectionMethod · 0.95
AddMethod · 0.95
AddMethod · 0.45

Tested by

no test coverage detected