in dbus-java/src/main/java/org/freedesktop/dbus/messages/MethodReturn.java [34:100]
public MethodReturn(String source, String dest, long replyserial, String sig, Object... args) throws DBusException {
super(DBusConnection.getEndianness(), Message.MessageType.METHOD_RETURN, (byte) 0);
getHeaders().put(Message.HeaderField.REPLY_SERIAL, replyserial);
List<Object> hargs = new ArrayList<>();
hargs.add(new Object[] {
Message.HeaderField.REPLY_SERIAL, new Object[] {
ArgumentType.UINT32_STRING, replyserial
}
});
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 != 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;
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);
}
marshallint(getByteCounter() - c, blen, 0, 4);
}