Skip to content

Commit 83071d2

Browse files
committed
Remove Order member from Message
Because messages bodies are automatically decoded, the byte order is only interesting when encoding messages. Now the byte order is passed to the EncodeTo function.
1 parent b8f9c9a commit 83071d2

File tree

7 files changed

+23
-38
lines changed

7 files changed

+23
-38
lines changed

call.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dbus
22

33
import (
4-
"encoding/binary"
54
"errors"
65
"strings"
76
)
@@ -68,7 +67,6 @@ func (o *Object) Go(method string, flags Flags, ch chan *Call, args ...interface
6867
}
6968
method = method[i+1:]
7069
msg := new(Message)
71-
msg.Order = binary.LittleEndian
7270
msg.Type = TypeMethodCall
7371
msg.serial = <-o.conn.serial
7472
msg.Flags = flags & (FlagNoAutoStart | FlagNoReplyExpected)

conn.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package dbus
22

33
import (
44
"bytes"
5-
"encoding/binary"
65
"errors"
76
"io"
87
"os"
@@ -420,7 +419,6 @@ func (conn *Conn) Send(msg *Message, ch chan *Call) *Call {
420419
// it to conn.out.
421420
func (conn *Conn) sendError(e Error, dest string, serial uint32) {
422421
msg := new(Message)
423-
msg.Order = binary.LittleEndian
424422
msg.Type = TypeError
425423
msg.serial = <-conn.serial
426424
msg.Headers = make(map[HeaderField]Variant)
@@ -442,7 +440,6 @@ func (conn *Conn) sendError(e Error, dest string, serial uint32) {
442440
// sends it to conn.out.
443441
func (conn *Conn) sendReply(dest string, serial uint32, values ...interface{}) {
444442
msg := new(Message)
445-
msg.Order = binary.LittleEndian
446443
msg.Type = TypeMethodReply
447444
msg.serial = <-conn.serial
448445
msg.Headers = make(map[HeaderField]Variant)

export.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dbus
22

33
import (
4-
"encoding/binary"
54
"errors"
65
"reflect"
76
"strings"
@@ -116,7 +115,6 @@ func (conn *Conn) handleCall(msg *Message) {
116115
}
117116
if msg.Flags&FlagNoReplyExpected == 0 {
118117
reply := new(Message)
119-
reply.Order = binary.LittleEndian
120118
reply.Type = TypeMethodReply
121119
reply.serial = <-conn.serial
122120
reply.Headers = make(map[HeaderField]Variant)
@@ -156,7 +154,6 @@ func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) erro
156154
return errors.New("invalid interface name")
157155
}
158156
msg := new(Message)
159-
msg.Order = binary.LittleEndian
160157
msg.Type = TypeSignal
161158
msg.serial = <-conn.serial
162159
msg.Headers = make(map[HeaderField]Variant)

message.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dbus
33
import (
44
"bytes"
55
"encoding/binary"
6+
"errors"
67
"fmt"
78
"io"
89
"reflect"
@@ -84,9 +85,6 @@ var requiredFields = [typeMax][]HeaderField{
8485

8586
// Message represents a single DBus message.
8687
type Message struct {
87-
// must be binary.BigEndian or binary.LittleEndian
88-
Order binary.ByteOrder
89-
9088
Type
9189
Flags
9290
Headers map[HeaderField]Variant
@@ -103,10 +101,10 @@ type header struct {
103101
Variant
104102
}
105103

106-
// DecodeMessage tries to decode a single message from the given reader.
107-
// The byte order is figured out from the first byte. The possibly returned
108-
// error can be an error of the underlying reader, an InvalidMessageError or a
109-
// FormatError.
104+
// DecodeMessage tries to decode a single message in the D-Bus wire format
105+
// from the given reader. The byte order is figured out from the first byte.
106+
// The possibly returned error can be an error of the underlying reader, an
107+
// InvalidMessageError or a FormatError.
110108
func DecodeMessage(rd io.Reader) (msg *Message, err error) {
111109
var order binary.ByteOrder
112110
var hlength, length uint32
@@ -131,7 +129,6 @@ func DecodeMessage(rd io.Reader) (msg *Message, err error) {
131129
dec.pos = 1
132130

133131
msg = new(Message)
134-
msg.Order = order
135132
err = dec.Decode(&msg.Type, &msg.Flags, &proto, &length, &msg.serial)
136133
if err != nil {
137134
return nil, err
@@ -185,21 +182,24 @@ func DecodeMessage(rd io.Reader) (msg *Message, err error) {
185182
return
186183
}
187184

188-
// EncodeTo encodes and sends a message to the given writer. If the message is
189-
// not valid or an error occurs when writing, an error is returned.
190-
func (msg *Message) EncodeTo(out io.Writer) error {
185+
// EncodeTo encodes and sends a message to the given writer. The byte order must
186+
// be either binary.LittleEndian or binary.BigEndian. If the message is not
187+
// valid or an error occurs when writing, an error is returned.
188+
func (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) error {
191189
if err := msg.IsValid(); err != nil {
192190
return err
193191
}
194192
var vs [7]interface{}
195-
switch msg.Order {
193+
switch order {
196194
case binary.LittleEndian:
197195
vs[0] = byte('l')
198196
case binary.BigEndian:
199197
vs[0] = byte('B')
198+
default:
199+
return errors.New("dbus: invalid byte order")
200200
}
201201
body := new(bytes.Buffer)
202-
enc := NewEncoder(body, msg.Order)
202+
enc := NewEncoder(body, order)
203203
if len(msg.Body) != 0 {
204204
enc.Encode(msg.Body...)
205205
}
@@ -214,7 +214,7 @@ func (msg *Message) EncodeTo(out io.Writer) error {
214214
}
215215
vs[6] = headers
216216
var buf bytes.Buffer
217-
enc = NewEncoder(&buf, msg.Order)
217+
enc = NewEncoder(&buf, order)
218218
enc.Encode(vs[:]...)
219219
enc.align(8)
220220
body.WriteTo(&buf)
@@ -230,11 +230,6 @@ func (msg *Message) EncodeTo(out io.Writer) error {
230230
// IsValid checks whether msg is a valid message and returns an
231231
// InvalidMessageError if it is not.
232232
func (msg *Message) IsValid() error {
233-
switch msg.Order {
234-
case binary.LittleEndian, binary.BigEndian:
235-
default:
236-
return InvalidMessageError("invalid byte order")
237-
}
238233
if msg.Flags & ^(FlagNoAutoStart|FlagNoReplyExpected) != 0 {
239234
return InvalidMessageError("invalid flags")
240235
}

proto_test.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,15 +208,14 @@ func TestProtoStoreNestedStruct(t *testing.T) {
208208
func TestMessage(t *testing.T) {
209209
buf := new(bytes.Buffer)
210210
message := new(Message)
211-
message.Order = binary.LittleEndian
212211
message.Type = TypeMethodCall
213212
message.serial = 32
214213
message.Headers = map[HeaderField]Variant{
215214
FieldPath: MakeVariant(ObjectPath("/org/foo/bar")),
216215
FieldMember: MakeVariant("baz"),
217216
}
218217
message.Body = make([]interface{}, 0)
219-
err := message.EncodeTo(buf)
218+
err := message.EncodeTo(buf, binary.LittleEndian)
220219
if err != nil {
221220
t.Error(err)
222221
}
@@ -228,7 +227,6 @@ func TestMessage(t *testing.T) {
228227

229228
// ordinary org.freedesktop.DBus.Hello call
230229
var smallMessage = &Message{
231-
Order: binary.LittleEndian,
232230
Type: TypeMethodCall,
233231
serial: 1,
234232
Headers: map[HeaderField]Variant{
@@ -241,7 +239,6 @@ var smallMessage = &Message{
241239

242240
// org.freedesktop.Notifications.Notify
243241
var bigMessage = &Message{
244-
Order: binary.LittleEndian,
245242
Type: TypeMethodCall,
246243
serial: 2,
247244
Headers: map[HeaderField]Variant{
@@ -271,7 +268,7 @@ func BenchmarkDecodeMessageSmall(b *testing.B) {
271268

272269
b.StopTimer()
273270
buf := new(bytes.Buffer)
274-
err = smallMessage.EncodeTo(buf)
271+
err = smallMessage.EncodeTo(buf, binary.LittleEndian)
275272
if err != nil {
276273
b.Fatal(err)
277274
}
@@ -292,7 +289,7 @@ func BenchmarkDecodeMessageBig(b *testing.B) {
292289

293290
b.StopTimer()
294291
buf := new(bytes.Buffer)
295-
err = bigMessage.EncodeTo(buf)
292+
err = bigMessage.EncodeTo(buf, binary.LittleEndian)
296293
if err != nil {
297294
b.Fatal(err)
298295
}
@@ -310,7 +307,7 @@ func BenchmarkDecodeMessageBig(b *testing.B) {
310307
func BenchmarkEncodeMessageSmall(b *testing.B) {
311308
var err error
312309
for i := 0; i < b.N; i++ {
313-
err = smallMessage.EncodeTo(ioutil.Discard)
310+
err = smallMessage.EncodeTo(ioutil.Discard, binary.LittleEndian)
314311
if err != nil {
315312
b.Fatal(err)
316313
}
@@ -320,7 +317,7 @@ func BenchmarkEncodeMessageSmall(b *testing.B) {
320317
func BenchmarkEncodeMessageBig(b *testing.B) {
321318
var err error
322319
for i := 0; i < b.N; i++ {
323-
err = bigMessage.EncodeTo(ioutil.Discard)
320+
err = bigMessage.EncodeTo(ioutil.Discard, binary.LittleEndian)
324321
if err != nil {
325322
b.Fatal(err)
326323
}

transport_generic.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dbus
22

33
import (
4+
"encoding/binary"
45
"errors"
56
"io"
67
)
@@ -30,5 +31,5 @@ func (t genericTransport) SendMessage(msg *Message) error {
3031
return errors.New("unix fd passing not enabled")
3132
}
3233
}
33-
return msg.EncodeTo(t)
34+
return msg.EncodeTo(t, binary.LittleEndian)
3435
}

transport_unix.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func (t *unixTransport) SendMessage(msg *Message) error {
169169
msg.Headers[FieldUnixFDs] = MakeVariant(uint32(len(fds)))
170170
oob := syscall.UnixRights(fds...)
171171
buf := new(bytes.Buffer)
172-
msg.EncodeTo(buf)
172+
msg.EncodeTo(buf, binary.LittleEndian)
173173
n, oobn, err := t.UnixConn.WriteMsgUnix(buf.Bytes(), oob, nil)
174174
if err != nil {
175175
return err
@@ -178,7 +178,7 @@ func (t *unixTransport) SendMessage(msg *Message) error {
178178
return io.ErrShortWrite
179179
}
180180
} else {
181-
if err := msg.EncodeTo(t); err != nil {
181+
if err := msg.EncodeTo(t, binary.LittleEndian); err != nil {
182182
return nil
183183
}
184184
}

0 commit comments

Comments
 (0)