2253306 - golang-github-openprinting-goipp-1.1.0 is available
This commit is contained in:
parent
7777062b8f
commit
a2a59cd747
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/goipp-1.0.0.tar.gz
|
||||
/goipp-1.1.0.tar.gz
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
# https://github.com/OpenPrinting/goipp
|
||||
%global goipath github.com/OpenPrinting/goipp
|
||||
Version: 1.0.0
|
||||
Version: 1.1.0
|
||||
|
||||
%gometa
|
||||
|
||||
@ -14,7 +14,7 @@ Package goipp implements the IPP core protocol in pure Go (RFC 8010).}
|
||||
%global godocs README.md index.md
|
||||
|
||||
Name: %{goname}
|
||||
Release: 9%{?dist}
|
||||
Release: 1%{?dist}
|
||||
Summary: IPP core protocol in pure Go (RFC 8010)
|
||||
|
||||
# Upstream license specification: BSD-2-Clause
|
||||
@ -22,6 +22,11 @@ License: BSD-2-Clause
|
||||
URL: %{gourl}
|
||||
Source0: %{gosource}
|
||||
|
||||
# reverting the change which introduced support for Pantum printers, which
|
||||
# broke conformation to IPP standards and has security implications
|
||||
# https://lore.kernel.org/printing-architecture/b2c6c270-4933-4bde-a299-52802e6e8d88@shentel.net/T/#u
|
||||
Patch001: pantum-workaround-revert.patch
|
||||
|
||||
%description
|
||||
%{common_description}
|
||||
|
||||
@ -29,6 +34,7 @@ Source0: %{gosource}
|
||||
|
||||
%prep
|
||||
%goprep
|
||||
%autopatch
|
||||
|
||||
%install
|
||||
%gopkginstall
|
||||
@ -41,6 +47,9 @@ Source0: %{gosource}
|
||||
%gopkgfiles
|
||||
|
||||
%changelog
|
||||
* Thu Jan 11 2024 Zdenek Dohnal <zdohnal@redhat.com> - 1.1.0-1
|
||||
- 2253306 - golang-github-openprinting-goipp-1.1.0 is available
|
||||
|
||||
* Thu Nov 23 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.0.0-9
|
||||
- Rebuild for any CVE fixes in golang
|
||||
|
||||
|
||||
522
pantum-workaround-revert.patch
Normal file
522
pantum-workaround-revert.patch
Normal file
@ -0,0 +1,522 @@
|
||||
diff --git a/decoder.go b/decoder.go
|
||||
index ed81ab0..89e46a1 100644
|
||||
--- a/decoder.go
|
||||
+++ b/decoder.go
|
||||
@@ -15,27 +15,11 @@ import (
|
||||
"io"
|
||||
)
|
||||
|
||||
-// DecoderOptions represents message decoder options
|
||||
-type DecoderOptions struct {
|
||||
- // EnableWorkarounds, if set to true, enables various workarounds
|
||||
- // for decoding IPP messages that violate IPP protocol specification
|
||||
- //
|
||||
- // Currently it includes the following workarounds:
|
||||
- // * Pantum M7300FDW violates collection encoding rules.
|
||||
- // Instead of using TagMemberName, it uses named attributes
|
||||
- // within the collection
|
||||
- //
|
||||
- // The list of implemented workarounds may grow in the
|
||||
- // future
|
||||
- EnableWorkarounds bool
|
||||
-}
|
||||
-
|
||||
-// messageDecoder represents Message decoder
|
||||
+// Type messageDecoder represents Message decoder
|
||||
type messageDecoder struct {
|
||||
- in io.Reader // Input stream
|
||||
- off int // Offset of last read
|
||||
- cnt int // Count of read bytes
|
||||
- opt DecoderOptions // Options
|
||||
+ in io.Reader // Input stream
|
||||
+ off int // Offset of last read
|
||||
+ cnt int // Count of read bytes
|
||||
}
|
||||
|
||||
// Decode the message
|
||||
@@ -166,35 +150,9 @@ func (md *messageDecoder) decode(m *Message) error {
|
||||
}
|
||||
|
||||
// Decode a Collection
|
||||
-//
|
||||
-// Collection is like a nested object - an attribute which value is a sequence
|
||||
-// of named attributes. Collections can be nested.
|
||||
-//
|
||||
-// Wire format:
|
||||
-// ATTR: Tag = TagBeginCollection, - the outer attribute that
|
||||
-// Name = "name", value - ignored contains the collection
|
||||
-//
|
||||
-// ATTR: Tag = TagMemberName, name = "", - member name \
|
||||
-// value - string, name of the next |
|
||||
-// member | repeated for
|
||||
-// | each member
|
||||
-// ATTR: Tag = any attribute tag, name = "", - repeated for |
|
||||
-// value = member value multi-value /
|
||||
-// members
|
||||
-//
|
||||
-// ATTR: Tag = TagEndCollection, name = "",
|
||||
-// value - ignored
|
||||
-//
|
||||
-// The format looks a bit baroque, but please note that it was added
|
||||
-// in the IPP 2.0. For IPP 1.x collection looks like a single multi-value
|
||||
-// TagBeginCollection attribute (attributes without names considered
|
||||
-// next value for the previously defined named attributes) and so
|
||||
-// 1.x parser silently ignores collections and doesn't get confused
|
||||
-// with them.
|
||||
func (md *messageDecoder) decodeCollection() (Collection, error) {
|
||||
collection := make(Collection, 0)
|
||||
-
|
||||
- memberName := ""
|
||||
+ //var name string
|
||||
|
||||
for {
|
||||
tag, err := md.decodeTag()
|
||||
@@ -208,10 +166,16 @@ func (md *messageDecoder) decodeCollection() (Collection, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
- // Check for TagMemberName without the subsequent value attribute
|
||||
- if (tag == TagMemberName || tag == TagEndCollection) && memberName != "" {
|
||||
- err = fmt.Errorf("Collection: unexpected %s, expected value tag", tag)
|
||||
- return nil, err
|
||||
+ // We are about to finish with current attribute (if any),
|
||||
+ // either because we've got an end of collection, or a next
|
||||
+ // attribute name. Check that we are leaving the current
|
||||
+ // attribute in a consistent state (i.e., with at least one value)
|
||||
+ if tag == TagMemberName || tag == TagEndCollection {
|
||||
+ l := len(collection)
|
||||
+ if l > 0 && len(collection[l-1].Values) == 0 {
|
||||
+ err = fmt.Errorf("collection: unexpected %s, expected value tag", tag)
|
||||
+ return nil, err
|
||||
+ }
|
||||
}
|
||||
|
||||
// Fetch next attribute
|
||||
@@ -221,48 +185,36 @@ func (md *messageDecoder) decodeCollection() (Collection, error) {
|
||||
}
|
||||
|
||||
// Process next attribute
|
||||
- switch tag {
|
||||
- case TagEndCollection:
|
||||
+ switch {
|
||||
+ case tag == TagEndCollection:
|
||||
return collection, nil
|
||||
|
||||
- case TagMemberName:
|
||||
- memberName = string(attr.Values[0].V.(String))
|
||||
- if memberName == "" {
|
||||
- err = fmt.Errorf("Collection: %s value is empty", tag)
|
||||
- return nil, err
|
||||
- }
|
||||
+ case tag == TagMemberName:
|
||||
+ attr.Name = string(attr.Values[0].V.(String))
|
||||
+ attr.Values = nil
|
||||
|
||||
- case TagBeginCollection:
|
||||
- // Decode nested collection
|
||||
- attr.Values[0].V, err = md.decodeCollection()
|
||||
- if err != nil {
|
||||
+ if attr.Name == "" {
|
||||
+ err = fmt.Errorf("collection: %s contains empty attribute name", tag)
|
||||
return nil, err
|
||||
}
|
||||
- fallthrough
|
||||
+
|
||||
+ collection = append(collection, attr)
|
||||
+
|
||||
+ case len(collection) == 0:
|
||||
+ // We've got a value without preceding TagMemberName
|
||||
+ err = fmt.Errorf("collection: unexpected %s, expected %s", tag, TagMemberName)
|
||||
+ return nil, err
|
||||
|
||||
default:
|
||||
- if md.opt.EnableWorkarounds &&
|
||||
- memberName == "" && attr.Name != "" {
|
||||
- // Workaround for: Pantum M7300FDW
|
||||
- //
|
||||
- // This device violates collection encoding rules.
|
||||
- // Instead of using TagMemberName, it uses named
|
||||
- // attributes within the collection
|
||||
- memberName = attr.Name
|
||||
+ if tag == TagBeginCollection {
|
||||
+ attr.Values[0].V, err = md.decodeCollection()
|
||||
+ if err != nil {
|
||||
+ return nil, err
|
||||
+ }
|
||||
}
|
||||
|
||||
- if memberName != "" {
|
||||
- attr.Name = memberName
|
||||
- collection = append(collection, attr)
|
||||
- memberName = ""
|
||||
- } else if len(collection) > 0 {
|
||||
- l := len(collection)
|
||||
- collection[l-1].Values.Add(tag, attr.Values[0].V)
|
||||
- } else {
|
||||
- // We've got a value without preceding TagMemberName
|
||||
- err = fmt.Errorf("Collection: unexpected %s, expected %s", tag, TagMemberName)
|
||||
- return nil, err
|
||||
- }
|
||||
+ l := len(collection)
|
||||
+ collection[l-1].Values.Add(tag, attr.Values[0].V)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -270,7 +222,6 @@ func (md *messageDecoder) decodeCollection() (Collection, error) {
|
||||
// Decode a tag
|
||||
func (md *messageDecoder) decodeTag() (Tag, error) {
|
||||
t, err := md.decodeU8()
|
||||
-
|
||||
return Tag(t), err
|
||||
}
|
||||
|
||||
@@ -287,14 +238,6 @@ func (md *messageDecoder) decodeCode() (Code, error) {
|
||||
}
|
||||
|
||||
// Decode a single attribute
|
||||
-//
|
||||
-// Wire format:
|
||||
-// 1 byte: Tag
|
||||
-// 2+N bytes: Name length (2 bytes) + name string
|
||||
-// 2+N bytes: Value length (2 bytes) + value bytes
|
||||
-//
|
||||
-// For the extended tag format, Tag is encoded as TagExtension and
|
||||
-// 4 bytes of the actual tag value prepended to the value bytes
|
||||
func (md *messageDecoder) decodeAttribute(tag Tag) (Attribute, error) {
|
||||
var attr Attribute
|
||||
var value []byte
|
||||
diff --git a/goipp_test.go b/goipp_test.go
|
||||
index 89a4e91..06800e8 100644
|
||||
--- a/goipp_test.go
|
||||
+++ b/goipp_test.go
|
||||
@@ -562,7 +562,7 @@ func TestDecodeErrors(t *testing.T) {
|
||||
assertErrorIs(t, err, "Message truncated at")
|
||||
}
|
||||
|
||||
- d = goodMessage1
|
||||
+ d = good_message_1
|
||||
for i := 0; i < len(d); i++ {
|
||||
err = m.DecodeBytes(d[:i])
|
||||
assertErrorIs(t, err, "Message truncated at")
|
||||
@@ -678,7 +678,7 @@ func TestDecodeErrors(t *testing.T) {
|
||||
|
||||
d = append(hdr, body...)
|
||||
err = m.DecodeBytes(d)
|
||||
- assertErrorIs(t, err, "Collection: unexpected endCollection, expected value tag")
|
||||
+ assertErrorIs(t, err, "collection: unexpected endCollection, expected value tag at 0x23")
|
||||
|
||||
// Collection: unexpected memberAttrName, expected value tag
|
||||
body = []byte{
|
||||
@@ -713,7 +713,7 @@ func TestDecodeErrors(t *testing.T) {
|
||||
|
||||
d = append(hdr, body...)
|
||||
err = m.DecodeBytes(d)
|
||||
- assertErrorIs(t, err, "Collection: unexpected memberAttrName, expected value tag")
|
||||
+ assertErrorIs(t, err, "collection: unexpected memberAttrName, expected value tag at 0x24")
|
||||
|
||||
// Collection: memberAttrName value is empty
|
||||
body = []byte{
|
||||
@@ -742,7 +742,7 @@ func TestDecodeErrors(t *testing.T) {
|
||||
|
||||
d = append(hdr, body...)
|
||||
err = m.DecodeBytes(d)
|
||||
- assertErrorIs(t, err, "Collection: memberAttrName value is empty")
|
||||
+ assertErrorIs(t, err, "collection: memberAttrName contains empty attribute name at 0x1d")
|
||||
|
||||
// Collection: unexpected integer, expected memberAttrName
|
||||
body = []byte{
|
||||
@@ -772,7 +772,7 @@ func TestDecodeErrors(t *testing.T) {
|
||||
|
||||
d = append(hdr, body...)
|
||||
err = m.DecodeBytes(d)
|
||||
- assertErrorIs(t, err, "Collection: unexpected integer, expected memberAttrName")
|
||||
+ assertErrorIs(t, err, "collection: unexpected integer, expected memberAttrName at 0x1d")
|
||||
}
|
||||
|
||||
// Test errors in decoding values
|
||||
@@ -1066,11 +1066,9 @@ func TestTagExtension(t *testing.T) {
|
||||
}
|
||||
|
||||
// Test message decoding
|
||||
-func testDecode(t *testing.T, data []byte, opt DecoderOptions,
|
||||
- mustFail, mustEncode bool) {
|
||||
-
|
||||
+func testDecode(t *testing.T, data []byte, mustFail bool) {
|
||||
var m Message
|
||||
- err := m.DecodeEx(bytes.NewBuffer(data), opt)
|
||||
+ err := m.Decode(bytes.NewBuffer(data))
|
||||
|
||||
if mustFail {
|
||||
assertWithError(t, err)
|
||||
@@ -1082,19 +1080,15 @@ func testDecode(t *testing.T, data []byte, opt DecoderOptions,
|
||||
return
|
||||
}
|
||||
|
||||
- //m.Print(os.Stdout, true)
|
||||
-
|
||||
if !m.Equal(m) {
|
||||
t.Errorf("Message is not equal to itself")
|
||||
}
|
||||
|
||||
- if mustEncode {
|
||||
- buf, err := m.EncodeBytes()
|
||||
- assertNoError(t, err)
|
||||
+ buf, err := m.EncodeBytes()
|
||||
+ assertNoError(t, err)
|
||||
|
||||
- if !bytes.Equal(buf, data) {
|
||||
- t.Errorf("Message is not the same after decoding and encoding")
|
||||
- }
|
||||
+ if !bytes.Equal(buf, data) {
|
||||
+ t.Errorf("Message is not the same after decoding and encoding")
|
||||
}
|
||||
|
||||
// We can't test a lot of (*Message) Print(), so lets test
|
||||
@@ -1103,34 +1097,24 @@ func testDecode(t *testing.T, data []byte, opt DecoderOptions,
|
||||
}
|
||||
|
||||
func TestDecodeGoodMessage1(t *testing.T) {
|
||||
- testDecode(t, goodMessage1, DecoderOptions{}, false, true)
|
||||
+ testDecode(t, good_message_1, false)
|
||||
}
|
||||
|
||||
func TestDecodeGoodMessage2(t *testing.T) {
|
||||
- testDecode(t, goodMessage2, DecoderOptions{}, false, true)
|
||||
+ testDecode(t, good_message_2, false)
|
||||
}
|
||||
|
||||
func TestDecodeBadMessage1(t *testing.T) {
|
||||
- testDecode(t, badMessage1, DecoderOptions{}, true, false)
|
||||
- testDecode(t, badMessage1,
|
||||
- DecoderOptions{EnableWorkarounds: true}, false, false)
|
||||
-}
|
||||
-
|
||||
-func TestDecodeHPOfficeJetPro8730(t *testing.T) {
|
||||
- testDecode(t, attrsHPOfficeJetPro8730, DecoderOptions{}, false, true)
|
||||
+ testDecode(t, bad_message_1, true)
|
||||
}
|
||||
|
||||
-func TestDecodePantumM7300FDW(t *testing.T) {
|
||||
- testDecode(t, attrsPantumM7300FDW,
|
||||
- DecoderOptions{EnableWorkarounds: false}, true, false)
|
||||
-
|
||||
- testDecode(t, attrsPantumM7300FDW,
|
||||
- DecoderOptions{EnableWorkarounds: true}, false, false)
|
||||
+func TestDecodeBigMessage(t *testing.T) {
|
||||
+ testDecode(t, big_message, false)
|
||||
}
|
||||
|
||||
// ------------------------ Test Data ------------------------
|
||||
// The good message - 1
|
||||
-var goodMessage1 = []byte{
|
||||
+var good_message_1 = []byte{
|
||||
0x01, 0x01, // IPP version
|
||||
0x00, 0x02, // Print-Job operation
|
||||
0x00, 0x00, 0x00, 0x01, // Request ID
|
||||
@@ -1289,7 +1273,7 @@ var goodMessage1 = []byte{
|
||||
}
|
||||
|
||||
// The good message - 2
|
||||
-var goodMessage2 = []byte{
|
||||
+var good_message_2 = []byte{
|
||||
0x01, 0x01, // IPP version
|
||||
0x00, 0x02, // Print-Job operation
|
||||
0x00, 0x00, 0x00, 0x01, // Request ID
|
||||
@@ -1314,12 +1298,7 @@ var goodMessage2 = []byte{
|
||||
}
|
||||
|
||||
// The bad message - 1
|
||||
-//
|
||||
-// This message violates IPP encoding rules: instead of
|
||||
-// using TagMemberName it uses named attributes
|
||||
-//
|
||||
-// It must not decode normally, but must decode with workarounds
|
||||
-var badMessage1 = []byte{
|
||||
+var bad_message_1 = []byte{
|
||||
0x01, 0x01, // IPP version */
|
||||
0x00, 0x02, // Print-Job operation */
|
||||
0x00, 0x00, 0x00, 0x01, // Request ID */
|
||||
@@ -1387,7 +1366,7 @@ var badMessage1 = []byte{
|
||||
|
||||
// The big real example, Get-Printer-Attributes output
|
||||
// from the HP OfficeJet Pro 8730
|
||||
-var attrsHPOfficeJetPro8730 = []byte{
|
||||
+var big_message = []byte{
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x47, 0x00, 0x12, 0x61, 0x74, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x00, 0x05,
|
||||
0x75, 0x74, 0x66, 0x2d, 0x38, 0x48, 0x00, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
|
||||
@@ -2355,133 +2334,3 @@ var attrsHPOfficeJetPro8730 = []byte{
|
||||
0x69, 0x70, 0x6c, 0x65, 0x2d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x6a, 0x6f,
|
||||
0x62, 0x73, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x01, 0x00, 0x03,
|
||||
}
|
||||
-
|
||||
-// Get-Printer-Attributes output from Pantum M7300FDW
|
||||
-var attrsPantumM7300FDW = []byte{
|
||||
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x47, 0x00, 0x12,
|
||||
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2d, 0x63,
|
||||
- 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x00, 0x05, 0x75, 0x74, 0x66, 0x2d,
|
||||
- 0x38, 0x48, 0x00, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
|
||||
- 0x65, 0x73, 0x2d, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x2d, 0x6c,
|
||||
- 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x05, 0x65, 0x6e, 0x2d,
|
||||
- 0x55, 0x53, 0x04, 0x22, 0x00, 0x0f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2d,
|
||||
- 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x01, 0x00,
|
||||
- 0x49, 0x00, 0x19, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2d,
|
||||
- 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f,
|
||||
- 0x72, 0x74, 0x65, 0x64, 0x00, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f,
|
||||
- 0x75, 0x72, 0x66, 0x49, 0x00, 0x00, 0x00, 0x10, 0x69, 0x6d, 0x61, 0x67,
|
||||
- 0x65, 0x2f, 0x70, 0x77, 0x67, 0x2d, 0x72, 0x61, 0x73, 0x74, 0x65, 0x72,
|
||||
- 0x49, 0x00, 0x00, 0x00, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
|
||||
- 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73,
|
||||
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x00, 0x10, 0x6d, 0x6f, 0x70, 0x72,
|
||||
- 0x69, 0x61, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
|
||||
- 0x00, 0x03, 0x31, 0x2e, 0x33, 0x41, 0x00, 0x10, 0x70, 0x72, 0x69, 0x6e,
|
||||
- 0x74, 0x65, 0x72, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
- 0x00, 0x0e, 0x70, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x70, 0x72, 0x69,
|
||||
- 0x6e, 0x74, 0x65, 0x72, 0x41, 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74,
|
||||
- 0x65, 0x72, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x12, 0x50, 0x61, 0x6e,
|
||||
- 0x74, 0x75, 0x6d, 0x20, 0x49, 0x50, 0x50, 0x20, 0x70, 0x72, 0x69, 0x6e,
|
||||
- 0x74, 0x65, 0x72, 0x45, 0x00, 0x11, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65,
|
||||
- 0x72, 0x2d, 0x6d, 0x6f, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x00,
|
||||
- 0x26, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61,
|
||||
- 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f,
|
||||
- 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x6a, 0x75, 0x6d, 0x70, 0x2e, 0x68,
|
||||
- 0x74, 0x6d, 0x6c, 0x41, 0x00, 0x16, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65,
|
||||
- 0x72, 0x2d, 0x6d, 0x61, 0x6b, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x6d,
|
||||
- 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x16, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d,
|
||||
- 0x20, 0x4d, 0x37, 0x33, 0x30, 0x30, 0x46, 0x44, 0x57, 0x20, 0x53, 0x65,
|
||||
- 0x72, 0x69, 0x65, 0x73, 0x41, 0x00, 0x11, 0x70, 0x72, 0x69, 0x6e, 0x74,
|
||||
- 0x65, 0x72, 0x2d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x69, 0x64,
|
||||
- 0x00, 0x45, 0x4d, 0x46, 0x47, 0x3a, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d,
|
||||
- 0x3b, 0x43, 0x4d, 0x44, 0x3a, 0x3a, 0x44, 0x57, 0x2d, 0x50, 0x53, 0x2c,
|
||||
- 0x44, 0x57, 0x2d, 0x50, 0x43, 0x4c, 0x2c, 0x55, 0x52, 0x46, 0x3b, 0x4d,
|
||||
- 0x44, 0x4c, 0x3a, 0x2d, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b,
|
||||
- 0x43, 0x4c, 0x53, 0x3a, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x3b,
|
||||
- 0x44, 0x45, 0x53, 0x3a, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x3b, 0x45,
|
||||
- 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x75, 0x75,
|
||||
- 0x69, 0x64, 0x00, 0x2d, 0x75, 0x72, 0x6e, 0x3a, 0x75, 0x75, 0x69, 0x64,
|
||||
- 0x3a, 0x30, 0x37, 0x62, 0x63, 0x35, 0x61, 0x34, 0x37, 0x2d, 0x65, 0x64,
|
||||
- 0x66, 0x32, 0x2d, 0x34, 0x36, 0x36, 0x31, 0x2d, 0x38, 0x37, 0x34, 0x38,
|
||||
- 0x2d, 0x38, 0x36, 0x32, 0x30, 0x66, 0x37, 0x39, 0x64, 0x34, 0x61, 0x63,
|
||||
- 0x34, 0x45, 0x00, 0x0d, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d,
|
||||
- 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x00, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3a,
|
||||
- 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a,
|
||||
- 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x68,
|
||||
- 0x69, 0x70, 0x34, 0x38, 0x2e, 0x70, 0x6e, 0x67, 0x45, 0x00, 0x00, 0x00,
|
||||
- 0x26, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61,
|
||||
- 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f,
|
||||
- 0x66, 0x6c, 0x61, 0x67, 0x73, 0x68, 0x69, 0x70, 0x31, 0x32, 0x38, 0x2e,
|
||||
- 0x70, 0x6e, 0x67, 0x45, 0x00, 0x00, 0x00, 0x26, 0x68, 0x74, 0x74, 0x70,
|
||||
- 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74,
|
||||
- 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x66, 0x6c, 0x61, 0x67, 0x73,
|
||||
- 0x68, 0x69, 0x70, 0x35, 0x31, 0x32, 0x2e, 0x70, 0x6e, 0x67, 0x42, 0x00,
|
||||
- 0x13, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x64, 0x6e, 0x73,
|
||||
- 0x2d, 0x73, 0x64, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x1d, 0x50, 0x61,
|
||||
- 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x4d, 0x37, 0x33, 0x30, 0x30, 0x46, 0x44,
|
||||
- 0x57, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x31, 0x43, 0x36,
|
||||
- 0x46, 0x43, 0x44, 0x44, 0x00, 0x0d, 0x75, 0x72, 0x66, 0x2d, 0x73, 0x75,
|
||||
- 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x04, 0x56, 0x31, 0x2e,
|
||||
- 0x34, 0x44, 0x00, 0x00, 0x00, 0x02, 0x57, 0x38, 0x44, 0x00, 0x00, 0x00,
|
||||
- 0x03, 0x49, 0x53, 0x31, 0x44, 0x00, 0x00, 0x00, 0x04, 0x43, 0x50, 0x39,
|
||||
- 0x39, 0x44, 0x00, 0x00, 0x00, 0x03, 0x50, 0x51, 0x34, 0x44, 0x00, 0x00,
|
||||
- 0x00, 0x04, 0x4f, 0x42, 0x31, 0x30, 0x44, 0x00, 0x00, 0x00, 0x05, 0x52,
|
||||
- 0x53, 0x36, 0x30, 0x30, 0x44, 0x00, 0x00, 0x00, 0x03, 0x44, 0x4d, 0x31,
|
||||
- 0x44, 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x6b,
|
||||
- 0x69, 0x6e, 0x64, 0x00, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
|
||||
- 0x74, 0x44, 0x00, 0x00, 0x00, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f,
|
||||
- 0x70, 0x65, 0x34, 0x00, 0x14, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x2d, 0x73,
|
||||
- 0x69, 0x7a, 0x65, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
||||
- 0x64, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65,
|
||||
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x54, 0x56, 0x21,
|
||||
- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||
- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x6d, 0x24, 0x37, 0x00, 0x00, 0x00, 0x00,
|
||||
- 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69,
|
||||
- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x52,
|
||||
- 0x08, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73,
|
||||
- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x74, 0x04, 0x37, 0x00, 0x00,
|
||||
- 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d,
|
||||
- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00,
|
||||
- 0x00, 0x39, 0xd0, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65,
|
||||
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x52, 0x08, 0x37,
|
||||
- 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b,
|
||||
- 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00,
|
||||
- 0x04, 0x00, 0x00, 0x29, 0x04, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69,
|
||||
- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x39,
|
||||
- 0xd0, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21,
|
||||
- 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||
- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2c, 0x88, 0x21, 0x00, 0x0b, 0x79, 0x2d,
|
||||
- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00,
|
||||
- 0x00, 0x3f, 0x48, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
|
||||
- 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73,
|
||||
- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2a, 0xf8, 0x21, 0x00, 0x0b,
|
||||
- 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00,
|
||||
- 0x04, 0x00, 0x00, 0x55, 0xf0, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
|
||||
- 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65,
|
||||
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x27, 0x10, 0x21,
|
||||
- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||
- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x39, 0xd0, 0x37, 0x00, 0x00, 0x00, 0x00,
|
||||
- 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69,
|
||||
- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2e,
|
||||
- 0xe0, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73,
|
||||
- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x5b, 0xcc, 0x37, 0x00, 0x00,
|
||||
- 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d,
|
||||
- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00,
|
||||
- 0x00, 0x28, 0xed, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65,
|
||||
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x5e, 0x42, 0x37,
|
||||
- 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b,
|
||||
- 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00,
|
||||
- 0x04, 0x00, 0x00, 0x54, 0x56, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69,
|
||||
- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x8a,
|
||||
- 0xe8, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x33,
|
||||
- 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||
- 0x6e, 0x00, 0x08, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0x39, 0xd0, 0x33,
|
||||
- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||
- 0x6e, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x00, 0x00, 0x8b, 0x10, 0x37,
|
||||
- 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0f, 0x73, 0x69, 0x64, 0x65, 0x73,
|
||||
- 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x09,
|
||||
- 0x6f, 0x6e, 0x65, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64, 0x44, 0x00, 0x00,
|
||||
- 0x00, 0x14, 0x74, 0x77, 0x6f, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64, 0x2d,
|
||||
- 0x73, 0x68, 0x6f, 0x72, 0x74, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x44, 0x00,
|
||||
- 0x00, 0x00, 0x13, 0x74, 0x77, 0x6f, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64,
|
||||
- 0x2d, 0x6c, 0x6f, 0x6e, 0x67, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x03,
|
||||
-}
|
||||
diff --git a/message.go b/message.go
|
||||
index 4a7229a..7a4d2db 100644
|
||||
--- a/message.go
|
||||
+++ b/message.go
|
||||
@@ -157,19 +157,10 @@ func (m *Message) EncodeBytes() ([]byte, error) {
|
||||
return buf.Bytes(), err
|
||||
}
|
||||
|
||||
-// Decode reads message from io.Reader
|
||||
+// Decode message
|
||||
func (m *Message) Decode(in io.Reader) error {
|
||||
- return m.DecodeEx(in, DecoderOptions{})
|
||||
-}
|
||||
-
|
||||
-// DecodeEx reads message from io.Reader
|
||||
-//
|
||||
-// It is extended version of the Decode method, with additional
|
||||
-// DecoderOptions parameter
|
||||
-func (m *Message) DecodeEx(in io.Reader, opt DecoderOptions) error {
|
||||
md := messageDecoder{
|
||||
- in: in,
|
||||
- opt: opt,
|
||||
+ in: in,
|
||||
}
|
||||
|
||||
m.Reset()
|
||||
@@ -181,14 +172,6 @@ func (m *Message) DecodeBytes(data []byte) error {
|
||||
return m.Decode(bytes.NewBuffer(data))
|
||||
}
|
||||
|
||||
-// DecodeBytesEx decodes message from byte slice
|
||||
-//
|
||||
-// It is extended version of the DecodeBytes method, with additional
|
||||
-// DecoderOptions parameter
|
||||
-func (m *Message) DecodeBytesEx(data []byte, opt DecoderOptions) error {
|
||||
- return m.DecodeEx(bytes.NewBuffer(data), opt)
|
||||
-}
|
||||
-
|
||||
// Print pretty-prints the message. The 'request' parameter affects
|
||||
// interpretation of Message.Code: it is interpreted either
|
||||
// as Op or as Status
|
||||
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (goipp-1.0.0.tar.gz) = 871f87f4f4de1ff4c0ef2e198ba3d050fecd947040b5e486c11db0b9cedc26a45ad44dcadbde57e4bb56fe86e8b3b1ef84cb0e5f8671cbc081c3c312545d2648
|
||||
SHA512 (goipp-1.1.0.tar.gz) = 488b9633b491c2a40c9156166194b216287614fae36d19239c1d390c39be08f2c945ad3e9c7c39242cbd4dac92708b229c88a40343b653d8616993afaf53754e
|
||||
|
||||
Loading…
Reference in New Issue
Block a user