Rename NDesk.DBus namespace to just Wv.
[versaplex.git] / dbus-sharp / Message.cs
blob90b10685c9dd9f5419a456163e3c6668d1502ba5
1 // Copyright 2006 Alp Toker <alp@atoker.com>
2 // This software is made available under the MIT License
3 // See COPYING for details
5 using System;
6 using System.Collections.Generic;
7 using System.IO;
9 namespace Wv
11 public class Message
13 public Message ()
15 Header.Endianness = Connection.NativeEndianness;
16 Header.MessageType = MessageType.MethodCall;
17 Header.Flags = HeaderFlag.NoReplyExpected; //TODO: is this the right place to do this?
18 Header.MajorVersion = Protocol.Version;
19 Header.Fields = new Dictionary<FieldCode,object> ();
22 public Header Header;
24 public Connection Connection;
26 public Signature Signature
28 get {
29 object o;
30 if (Header.Fields.TryGetValue (FieldCode.Signature, out o))
31 return (Signature)o;
32 else
33 return Signature.Empty;
34 } set {
35 if (value == Signature.Empty)
36 Header.Fields.Remove (FieldCode.Signature);
37 else
38 Header.Fields[FieldCode.Signature] = value;
42 public bool ReplyExpected
44 get {
45 return (Header.Flags & HeaderFlag.NoReplyExpected) == HeaderFlag.None;
46 } set {
47 if (value)
48 Header.Flags &= ~HeaderFlag.NoReplyExpected; //flag off
49 else
50 Header.Flags |= HeaderFlag.NoReplyExpected; //flag on
54 //public HeaderField[] HeaderFields;
55 //public Dictionary<FieldCode,object>;
57 public byte[] Body;
59 //TODO: make use of Locked
61 protected bool locked = false;
62 public bool Locked
64 get {
65 return locked;
70 public void SetHeaderData (byte[] data)
72 EndianFlag endianness = (EndianFlag)data[0];
73 MessageReader reader = new MessageReader (endianness, data);
75 Header = (Header)reader.ReadStruct (typeof (Header));
78 public byte[] GetHeaderData ()
80 if (Body != null)
81 Header.Length = (uint)Body.Length;
83 MessageWriter writer = new MessageWriter (Header.Endianness);
84 writer.WriteValueType (Header, typeof (Header));
85 writer.CloseWrite ();
87 return writer.ToArray ();