org.freedesktop.dbus
Class Message

java.lang.Object
  extended by org.freedesktop.dbus.Message
Direct Known Subclasses:
DBusSignal, Error, MethodCall, MethodReturn

public class Message
extends Object

Superclass of all messages which are sent over the Bus. This class deals with all the marshalling to/from the wire format.


Nested Class Summary
static interface Message.ArgumentType
          Defines constants for each argument type.
static interface Message.Endian
          Defines constants representing the endianness of the message.
static interface Message.Flags
          Defines constants representing the flags which can be set on a message.
static interface Message.HeaderField
          Defines constants for each valid header field type.
static interface Message.MessageType
          Defines constants for each message type.
 
Field Summary
protected  long bytecounter
           
protected  byte flags
           
protected static long globalserial
           
protected  Map<Byte,Object> headers
           
static byte PROTOCOL
          The current protocol major version.
protected  byte protover
           
protected  long serial
           
protected  byte type
           
protected  byte[][] wiredata
           
 
Constructor Summary
protected Message()
          Create a blank message.
protected Message(byte endian, byte type, byte flags)
          Create a message; only to be called by sub-classes.
 
Method Summary
 int align(int current, byte type)
          Align a counter to the given type.
 void append(String sig, Object... data)
          Append a series of values to the message.
protected  void appendByte(byte b)
          Appends a byte to the buffer list.
protected  void appendBytes(byte[] buf)
          Appends a buffer to the buffer list.
 void appendint(long l, int width)
          Marshalls an integer of a given width and appends it to the message.
static long demarshallint(byte[] buf, int ofs, byte endian, int width)
          Demarshalls an integer of a given width from a buffer.
 long demarshallint(byte[] buf, int ofs, int width)
          Demarshalls an integer of a given width from a buffer.
static long demarshallintBig(byte[] buf, int ofs, int width)
          Demarshalls an integer of a given width from a buffer using big-endian format.
static long demarshallintLittle(byte[] buf, int ofs, int width)
          Demarshalls an integer of a given width from a buffer using little-endian format.
 Object[] extract(String sig, byte[] buf, int ofs)
          Demarshall values from a buffer.
 Object[] extract(String sig, byte[] buf, int[] ofs)
          Demarshall values from a buffer.
static int getAlignment(byte type)
          Return the alignment for a given type.
 String getDestination()
          Returns the destination of the message.
 int getFlags()
          Returns the message flags.
 Object getHeader(byte type)
          Returns the value of the header field of a given field.
static String getHeaderFieldName(byte field)
          Returns the name of the given header field.
 String getInterface()
          Returns the interface of the message.
 String getName()
          Returns the member name or error name this message represents.
 Object[] getParameters()
          Parses and returns the parameters to this message as an Object array.
 String getPath()
          Returns the object path of the message.
 long getReplySerial()
          If this is a reply to a message, this returns its serial.
 long getSerial()
          Returns the message serial ID (unique for this connection)
 String getSig()
          Returns the dbus signature of the parameters.
 String getSource()
          Returns the Bus ID that sent the message.
 byte[][] getWireData()
           
 void marshallint(long l, byte[] buf, int ofs, int width)
          Marshalls an integer of a given width into a buffer.
static void marshallintBig(long l, byte[] buf, int ofs, int width)
          Marshalls an integer of a given width into a buffer using big-endian format.
static void marshallintLittle(long l, byte[] buf, int ofs, int width)
          Marshalls an integer of a given width into a buffer using little-endian format.
 void pad(byte type)
          Pad the message to the proper alignment for the given type.
protected  void setArgs(Object[] args)
           
 void setSource(String source)
          Warning, do not use this method unless you really know what you are doing.
 String toString()
          Formats the message in a human-readable format.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PROTOCOL

public static final byte PROTOCOL
The current protocol major version.

See Also:
Constant Field Values

wiredata

protected byte[][] wiredata

bytecounter

protected long bytecounter

headers

protected Map<Byte,Object> headers

globalserial

protected static long globalserial

serial

protected long serial

type

protected byte type

flags

protected byte flags

protover

protected byte protover
Constructor Detail

Message

protected Message(byte endian,
                  byte type,
                  byte flags)
           throws DBusException
Create a message; only to be called by sub-classes.

Parameters:
endian - The endianness to create the message.
type - The message type.
flags - Any message flags.
Throws:
DBusException

Message

protected Message()
Create a blank message. Only to be used when calling populate.

Method Detail

getHeaderFieldName

public static String getHeaderFieldName(byte field)
Returns the name of the given header field.


appendBytes

protected void appendBytes(byte[] buf)
Appends a buffer to the buffer list.


appendByte

protected void appendByte(byte b)
Appends a byte to the buffer list.


demarshallint

public long demarshallint(byte[] buf,
                          int ofs,
                          int width)
Demarshalls an integer of a given width from a buffer. Endianness is determined from the format of the message.

Parameters:
buf - The buffer to demarshall from.
ofs - The offset to demarshall from.
width - The byte-width of the int.

demarshallint

public static long demarshallint(byte[] buf,
                                 int ofs,
                                 byte endian,
                                 int width)
Demarshalls an integer of a given width from a buffer.

Parameters:
buf - The buffer to demarshall from.
ofs - The offset to demarshall from.
endian - The endianness to use in demarshalling.
width - The byte-width of the int.

demarshallintBig

public static long demarshallintBig(byte[] buf,
                                    int ofs,
                                    int width)
Demarshalls an integer of a given width from a buffer using big-endian format.

Parameters:
buf - The buffer to demarshall from.
ofs - The offset to demarshall from.
width - The byte-width of the int.

demarshallintLittle

public static long demarshallintLittle(byte[] buf,
                                       int ofs,
                                       int width)
Demarshalls an integer of a given width from a buffer using little-endian format.

Parameters:
buf - The buffer to demarshall from.
ofs - The offset to demarshall from.
width - The byte-width of the int.

appendint

public void appendint(long l,
                      int width)
Marshalls an integer of a given width and appends it to the message. Endianness is determined from the message.

Parameters:
l - The integer to marshall.
width - The byte-width of the int.

marshallint

public void marshallint(long l,
                        byte[] buf,
                        int ofs,
                        int width)
Marshalls an integer of a given width into a buffer. Endianness is determined from the message.

Parameters:
l - The integer to marshall.
buf - The buffer to marshall to.
ofs - The offset to marshall to.
width - The byte-width of the int.

marshallintBig

public static void marshallintBig(long l,
                                  byte[] buf,
                                  int ofs,
                                  int width)
Marshalls an integer of a given width into a buffer using big-endian format.

Parameters:
l - The integer to marshall.
buf - The buffer to marshall to.
ofs - The offset to marshall to.
width - The byte-width of the int.

marshallintLittle

public static void marshallintLittle(long l,
                                     byte[] buf,
                                     int ofs,
                                     int width)
Marshalls an integer of a given width into a buffer using little-endian format.

Parameters:
l - The integer to marshall.
buf - The buffer to demarshall to.
ofs - The offset to demarshall to.
width - The byte-width of the int.

getWireData

public byte[][] getWireData()

toString

public String toString()
Formats the message in a human-readable format.

Overrides:
toString in class Object

getHeader

public Object getHeader(byte type)
Returns the value of the header field of a given field.

Parameters:
type - The field to return.
Returns:
The value of the field or null if unset.

pad

public void pad(byte type)
Pad the message to the proper alignment for the given type.


getAlignment

public static int getAlignment(byte type)
Return the alignment for a given type.


append

public void append(String sig,
                   Object... data)
            throws DBusException
Append a series of values to the message.

Parameters:
sig - The signature(s) of the value(s).
data - The value(s).
Throws:
DBusException

align

public int align(int current,
                 byte type)
Align a counter to the given type.

Parameters:
current - The current counter.
type - The type to align to.
Returns:
The new, aligned, counter.

extract

public Object[] extract(String sig,
                        byte[] buf,
                        int ofs)
                 throws DBusException
Demarshall values from a buffer.

Parameters:
sig - The D-Bus signature(s) of the value(s).
buf - The buffer to demarshall from.
ofs - The offset into the data buffer to start.
Returns:
The demarshalled value(s).
Throws:
DBusException

extract

public Object[] extract(String sig,
                        byte[] buf,
                        int[] ofs)
                 throws DBusException
Demarshall values from a buffer.

Parameters:
sig - The D-Bus signature(s) of the value(s).
buf - The buffer to demarshall from.
ofs - An array of two ints, the offset into the signature and the offset into the data buffer. These values will be updated to the start of the next value ofter demarshalling.
Returns:
The demarshalled value(s).
Throws:
DBusException

getSource

public String getSource()
Returns the Bus ID that sent the message.


getDestination

public String getDestination()
Returns the destination of the message.


getInterface

public String getInterface()
Returns the interface of the message.


getPath

public String getPath()
Returns the object path of the message.


getName

public String getName()
Returns the member name or error name this message represents.


getSig

public String getSig()
Returns the dbus signature of the parameters.


getFlags

public int getFlags()
Returns the message flags.


getSerial

public long getSerial()
Returns the message serial ID (unique for this connection)

Returns:
the message serial.

getReplySerial

public long getReplySerial()
If this is a reply to a message, this returns its serial.

Returns:
The reply serial, or 0 if it is not a reply.

getParameters

public Object[] getParameters()
                       throws DBusException
Parses and returns the parameters to this message as an Object array.

Throws:
DBusException

setArgs

protected void setArgs(Object[] args)

setSource

public void setSource(String source)
               throws DBusException
Warning, do not use this method unless you really know what you are doing.

Throws:
DBusException