in dbus-java/src/main/java/org/freedesktop/dbus/messages/MethodCall.java [38:129]
public MethodCall(String source, String dest, String path, String iface, String member, byte flags, String sig, Object... args) throws DBusException {
super(DBusConnection.getEndianness(), Message.MessageType.METHOD_CALL, flags);
if (null == member || null == path) {
throw new MessageFormatException("Must specify destination, path and function name to MethodCalls.");
}
getHeaders().put(Message.HeaderField.PATH, path);
getHeaders().put(Message.HeaderField.MEMBER, member);
List<Object> hargs = new ArrayList<>();
hargs.add(new Object[] {
Message.HeaderField.PATH, new Object[] {
ArgumentType.OBJECT_PATH_STRING, path
}
});
if (null != source) {
getHeaders().put(Message.HeaderField.SENDER, source);
hargs.add(new Object[] {
Message.HeaderField.SENDER, new Object[] {
ArgumentType.STRING_STRING, source
}
});
}
if (null != dest) {
getHeaders().put(Message.HeaderField.DESTINATION, dest);
hargs.add(new Object[] {
Message.HeaderField.DESTINATION, new Object[] {
ArgumentType.STRING_STRING, dest
}
});
}
if (null != iface) {
hargs.add(new Object[] {
Message.HeaderField.INTERFACE, new Object[] {
ArgumentType.STRING_STRING, iface
}
});
getHeaders().put(Message.HeaderField.INTERFACE, iface);
}
hargs.add(new Object[] {
Message.HeaderField.MEMBER, new Object[] {
ArgumentType.STRING_STRING, member
}
});
if (null != sig) {
logger.debug("Appending arguments with signature: {}", sig);
hargs.add(new Object[] {
Message.HeaderField.SIGNATURE, new Object[] {
ArgumentType.SIGNATURE_STRING, sig
}
});
getHeaders().put(Message.HeaderField.SIGNATURE, sig);
setArgs(args);
}
int totalFileDes = 0;
if( args != null ){
for( int x = 0; x < args.length; x++ ){
if( args[x] instanceof FileDescriptor ){
totalFileDes++;
}
}
}
if( totalFileDes > 0 ){
getHeaders().put(Message.HeaderField.UNIX_FDS, totalFileDes);
hargs.add(new Object[]{
Message.HeaderField.UNIX_FDS, new Object[]{
ArgumentType.UINT32_STRING, new UInt32( totalFileDes )
}
});
}
byte[] blen = new byte[4];
appendBytes(blen);
append("ua(yv)", getSerial(), hargs.toArray());
pad((byte) 8);
long c = getByteCounter();
if (null != sig) {
append(sig, args);
}
logger.debug("Appended body, type: {} start: {} end: {} size: {}",sig, c, getByteCounter(), (getByteCounter() - c));
marshallint(getByteCounter() - c, blen, 0, 4);
logger.debug("marshalled size ({}): {}",blen, Hexdump.format(blen));
}