Commit 0ed25892 authored by intrigeri's avatar intrigeri

Imported Upstream version 0.33.6

parent 1666ece1
......@@ -12,6 +12,7 @@ from
Emmanuele Bassi <ebassi-at-gmail-dot-com>
Olivier Blin <oblin-at-mandriva-dot-com>
Jack <ms419-at-freezone-dot-co-dot-uk>
Dave Belser <dbelser-at-aerosat-dot-com>
[...send patches to get your name here!]
......
Changes since 0.33.5
- Fix introspection XML handling when exporting objects with child
objects
- Improve output of Net::DBus::Dumper
- Add support for providing parameter & return value names in
introspection XML
- Fixes to marshalling of variants
- Fix handling of compound data types within object properties
- Remove non-portable makefile rules
- Fix ref counting bugs in error path.
Changes since 0.33.4
......
......@@ -528,10 +528,10 @@ _open(address)
dbus_error_init(&error);
DEBUG_MSG("Open connection shared %s\n", address);
con = dbus_connection_open(address, &error);
dbus_connection_ref(con);
if (!con) {
_croak_error (&error);
}
dbus_connection_ref(con);
RETVAL = con;
OUTPUT:
RETVAL
......@@ -546,10 +546,10 @@ _open_private(address)
dbus_error_init(&error);
DEBUG_MSG("Open connection private %s\n", address);
con = dbus_connection_open_private(address, &error);
dbus_connection_ref(con);
if (!con) {
_croak_error (&error);
}
dbus_connection_ref(con);
RETVAL = con;
OUTPUT:
RETVAL
......@@ -909,10 +909,10 @@ _open(type)
dbus_error_init(&error);
DEBUG_MSG("Open bus shared %d\n", type);
con = dbus_bus_get(type, &error);
dbus_connection_ref(con);
if (!con) {
_croak_error(&error);
}
dbus_connection_ref(con);
RETVAL = con;
OUTPUT:
RETVAL
......@@ -927,10 +927,10 @@ _open_private(type)
dbus_error_init(&error);
DEBUG_MSG("Open bus private %d\n", type);
con = dbus_bus_get_private(type, &error);
dbus_connection_ref(con);
if (!con) {
_croak_error(&error);
}
dbus_connection_ref(con);
RETVAL = con;
OUTPUT:
RETVAL
......
......@@ -2,7 +2,7 @@ Net-DBus may be redistributed and/or modified under the terms of Perl itself.
Either:
a) the GNU General Public License as published by the Free
Software Foundation; either version 1, or (at your option) any
Software Foundation; either version 2, or (at your option) any
later version
or
......
AUTHORS
autobuild.sh
CHANGES
COPYING
DBus.xs
examples/dump-object-xml.pl
examples/dump-object.pl
examples/example-client-async.pl
examples/example-client-no-introspect.pl
......@@ -47,9 +47,13 @@ lib/Net/DBus/Test/MockObject.pm
lib/Net/DBus/Tutorial.pod
lib/Net/DBus/Tutorial/ExportingObjects.pod
lib/Net/DBus/Tutorial/UsingObjects.pod
LICENSE
Makefile.PL
MANIFEST This list of files
MANIFEST.SKIP
META.yml
META.yml.PL
Net-DBus.spec
Net-DBus.spec.PL
README
t/00-constants.t
......@@ -67,8 +71,7 @@ t/55-method-calls.t
t/56-scalar-param-typing.t
t/60-object-props.t
t/65-object-magic.t
t/66-child-objects.t
t/70-errors.t
t/75-notifications.t
typemap
Net-DBus.spec
META.yml Module meta-data (added by MakeMaker)
......@@ -14,3 +14,4 @@ CVS
.hg
^Makefile$
^cover_db/
Net-DBus-.*.tar.gz
# http://module-build.sourceforge.net/META-spec.html
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
--- #YAML:1.0
name: Net-DBus
version: 0.33.5
version_from: lib/Net/DBus.pm
installdirs: site
abstract: Extension for the DBus bindings
version: 0.33.6
author:
- Daniel P. Berrange <dan@berrange.com>
license: gpl
generated_by: ExtUtils::MakeMaker version 6.30
requires:
Test::More: 0
Time::HiRes: 0
XML::Twig: 0
Time::HiRes: 0
XML::Twig: 0
build_requires:
Test::More: 0
Test::Pod: 0
Test::Pod::Coverage: 0
resources:
license: http://www.gnu.org/licenses/gpl.html
homepage: http://www.freedesktop.org/wiki/Software/dbus
repository: http://hg.berrange.com/libraries/net-dbus--devel
MailingList: http://lists.freedesktop.org/mailman/listinfo/dbus/
distribution_type: module
generated_by: ExtUtils::MakeMaker version 6.30
meta-spec:
version: 1.3
url: http://module-build.sourceforge.net/META-spec-v1.3.html
# Copyright (C) 2008 Daniel Berrange <dan@berrange.com>
use strict;
use warnings;
die unless (scalar @ARGV == 1);
open SRC, "lib/Net/DBus.pm"
or die "lib/Net/DBus.pm: $!";
our $VERSION;
while (<SRC>) {
if (/\$VERSION\s*=\s*'(.*)'/) {
$VERSION=$1;
}
}
close SRC;
local $/ = undef;
$_ = <DATA>;
s/\@VERSION\@/$VERSION/g;
open SPEC, ">$ARGV[0]" or die "$!";
print SPEC $_;
close SPEC;
__DATA__
--- #YAML:1.0
name: Net-DBus
abstract: Extension for the DBus bindings
version: @VERSION@
author:
- Daniel P. Berrange <dan@berrange.com>
license: gpl
generated_by: ExtUtils::MakeMaker version 6.30
requires:
Time::HiRes: 0
XML::Twig: 0
build_requires:
Test::More: 0
Test::Pod: 0
Test::Pod::Coverage: 0
resources:
license: http://www.gnu.org/licenses/gpl.html
homepage: http://www.freedesktop.org/wiki/Software/dbus
repository: http://hg.berrange.com/libraries/net-dbus--devel
MailingList: http://lists.freedesktop.org/mailman/listinfo/dbus/
distribution_type: module
meta-spec:
version: 1.3
url: http://module-build.sourceforge.net/META-spec-v1.3.html
......@@ -30,6 +30,7 @@ WriteMakefile(
"-DDBUS_API_SUBJECT_TO_CHANGE -DHAVE_CONN_DISCONNECT=0 -DNET_DBUS_DEBUG=1" :
"-DDBUS_API_SUBJECT_TO_CHANGE -DHAVE_CONN_DISCONNECT=1 -DNET_DBUS_DEBUG=1"),
'INC' => "-Wall $DBUS_CFLAGS",
'NO_META' => 1,
'depend' => {
Net-DBus.spec => '$(VERSION_FROM)',
Makefile => '$(VERSION_FROM)',
......@@ -47,26 +48,4 @@ sub libscan
($path =~ /\~$/ || $path =~ m,/CVS/,) ? undef : $path;
}
sub test {
my $self = shift;
my $mm_test = $self->SUPER::test(@_);
return '
TO_TEST_PM = $(TO_INST_PM:lib/%.pm=blib/test/%.pm.tstamp)
test :: test-syntax
test-syntax: pure_all $(TO_TEST_PM)
blib/test/%.pm.tstamp: lib/%.pm
@echo -n "Checking $<: "
#@perl -I blib/lib -c $<
@podchecker $<
@mkdir -p `dirname $@`
@touch $@
' . $mm_test;
}
__END__
# Automatically generated by DBus.spec.PL
%define debug_package %{nil}
%define perlvendorarch %(perl -e 'use Config; print $Config{installvendorarch}')
%define perlvendorlib %(perl -e 'use Config; print $Config{installvendorlib}')
%define perlvendorprefix %(perl -e 'use Config; print $Config{vendorprefix}')
%define perlvendorman3 %{perlvendorprefix}/share/man/man3
%define perlversion %(perl -e 'use Config; print $Config{version}')
%define appname Net-DBus
%define _extra_release %{?extra_release:%{extra_release}}
Summary: Perl API to the DBus message system
Name: perl-%{appname}
Version: 0.33.5
Version: 0.33.6
Release: 1%{_extra_release}
License: GPL
Group: Applications/Internet
Source: %{appname}-%{version}.tar.gz
BuildRoot: /var/tmp/%{appname}-%{version}-root
#BuildArchitectures: noarch
Requires: perl = %{perlversion}
# For XML::Twig
Requires: perl(XML::Twig)
# For Time::HiRes
Requires: perl(Time::HiRes)
License: GPLv2+ or Artistic
Group: Development/Libraries
URL: http://search.cpan.org/dist/%{appname}
Source0: http://www.cpan.org/modules/by-module/Net/%{appname}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: dbus >= 0.33
BuildRequires: dbus-devel >= 0.33
BuildRequires: dbus-devel > 0.33
BuildRequires: perl(XML::Twig)
BuildRequires: perl(Time::HiRes)
BuildRequires: perl(Test::More)
BuildRequires: perl(Test::Pod)
BuildRequires: perl(Test::Pod::Coverage)
%description
Provides a Perl API to the DBus message system
......@@ -37,28 +31,35 @@ Provides a Perl API to the DBus message system
%build
if [ -z "$DBUS_HOME" ]; then
perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor
%{__perl} Makefile.PL INSTALLDIRS=vendor
else
perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor DBUS_HOME=$DBUS_HOME
%{__perl} Makefile.PL INSTALLDIRS=vendor DBUS_HOME=$DBUS_HOME
fi
make
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install INSTALLVENDORMAN3DIR=$RPM_BUILD_ROOT%{perlvendorman3}
make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
find $RPM_BUILD_ROOT -name perllocal.pod -exec rm -f {} \;
find $RPM_BUILD_ROOT -name .packlist -exec rm -f {} \;
%{_fixperms} $RPM_BUILD_ROOT/*
%check
make test
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc README CHANGES AUTHORS COPYING examples/*.pl
%{perlvendorman3}/*
%{perlvendorarch}/Net/DBus.pm
%{perlvendorarch}/Net/DBus/
%{perlvendorarch}/auto/Net/DBus
%doc README CHANGES AUTHORS LICENSE examples/*.pl
%{_mandir}/man3/*
%{perl_vendorarch}/Net/DBus.pm
%{perl_vendorarch}/Net/DBus/
%{perl_vendorarch}/auto/Net/DBus
%changelog
* Fri Jan 6 2006 Daniel Berrange <berrange@localhost.localdomain> - 0.33.1-1
......
......@@ -12,13 +12,12 @@ open SRC, "lib/Net/DBus.pm"
our $VERSION;
while (<SRC>) {
if (/$VERSION\s*=\s*'(.*)'/) {
if (/\$VERSION\s*=\s*'(.*)'/) {
$VERSION=$1;
}
}
close SRC;
local $/ = undef;
$_ = <DATA>;
s/\@VERSION\@/$VERSION/g;
......@@ -29,12 +28,6 @@ close SPEC;
__DATA__
# Automatically generated by DBus.spec.PL
%define debug_package %{nil}
%define perlvendorarch %(perl -e 'use Config; print $Config{installvendorarch}')
%define perlvendorlib %(perl -e 'use Config; print $Config{installvendorlib}')
%define perlvendorprefix %(perl -e 'use Config; print $Config{vendorprefix}')
%define perlvendorman3 %{perlvendorprefix}/share/man/man3
%define perlversion %(perl -e 'use Config; print $Config{version}')
%define appname Net-DBus
%define _extra_release %{?extra_release:%{extra_release}}
......@@ -43,19 +36,19 @@ Summary: Perl API to the DBus message system
Name: perl-%{appname}
Version: @VERSION@
Release: 1%{_extra_release}
License: GPL
Group: Applications/Internet
Source: %{appname}-%{version}.tar.gz
BuildRoot: /var/tmp/%{appname}-%{version}-root
#BuildArchitectures: noarch
Requires: perl = %{perlversion}
# For XML::Twig
Requires: perl(XML::Twig)
# For Time::HiRes
Requires: perl(Time::HiRes)
License: GPLv2+ or Artistic
Group: Development/Libraries
URL: http://search.cpan.org/dist/%{appname}
Source0: http://www.cpan.org/modules/by-module/Net/%{appname}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: dbus >= 0.33
BuildRequires: dbus-devel >= 0.33
BuildRequires: dbus-devel > 0.33
BuildRequires: perl(XML::Twig)
BuildRequires: perl(Time::HiRes)
BuildRequires: perl(Test::More)
BuildRequires: perl(Test::Pod)
BuildRequires: perl(Test::Pod::Coverage)
%description
Provides a Perl API to the DBus message system
......@@ -66,28 +59,35 @@ Provides a Perl API to the DBus message system
%build
if [ -z "$DBUS_HOME" ]; then
perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor
%{__perl} Makefile.PL INSTALLDIRS=vendor
else
perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor DBUS_HOME=$DBUS_HOME
%{__perl} Makefile.PL INSTALLDIRS=vendor DBUS_HOME=$DBUS_HOME
fi
make
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install INSTALLVENDORMAN3DIR=$RPM_BUILD_ROOT%{perlvendorman3}
make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
find $RPM_BUILD_ROOT -name perllocal.pod -exec rm -f {} \;
find $RPM_BUILD_ROOT -name .packlist -exec rm -f {} \;
%{_fixperms} $RPM_BUILD_ROOT/*
%check
make test
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc README CHANGES AUTHORS COPYING examples/*.pl
%{perlvendorman3}/*
%{perlvendorarch}/Net/DBus.pm
%{perlvendorarch}/Net/DBus/
%{perlvendorarch}/auto/Net/DBus
%doc README CHANGES AUTHORS LICENSE examples/*.pl
%{_mandir}/man3/*
%{perl_vendorarch}/Net/DBus.pm
%{perl_vendorarch}/Net/DBus/
%{perl_vendorarch}/auto/Net/DBus
%changelog
* Fri Jan 6 2006 Daniel Berrange <berrange@localhost.localdomain> - 0.33.1-1
......
......@@ -113,13 +113,13 @@ Daniel Berrange <dan at berrange dot com>
COPYRIGHT AND LICENCE
---------------------
Copyright (C) 2004-2006 Daniel Berrange
Copyright (C) 2004-2008 Daniel Berrange
Net-DBus may be redistributed and/or modified under the terms of Perl itself.
Either:
a) the GNU General Public License as published by the Free
Software Foundation; either version 1, or (at your option) any
Software Foundation; either version 2, or (at your option) any
later version
or
......
......@@ -12,12 +12,9 @@ rm -rf MANIFEST blib pm_to_blib
perl Makefile.PL PREFIX=$AUTOBUILD_INSTALL_ROOT
rm -f MANIFEST
make manifest
echo $NAME.spec >> MANIFEST
# Build the RPM.
make
make manifest
if [ -z "$USE_COVER" ]; then
perl -MDevel::Cover -e '' 1>/dev/null 2>&1 && USE_COVER=1 || USE_COVER=0
......
#!/usr/bin/perl
use warnings;
use strict;
use Net::DBus;
use Net::DBus::Dumper;
use Carp qw(confess);
$SIG{__DIE__} = sub {confess $_[0] };
my $bus = Net::DBus->find;
if (int(@ARGV) != 2) {
die "syntax: $0 SERVICE OBJECT";
}
my $service = $bus->get_service(shift @ARGV);
my $object = $service->get_object(shift @ARGV);
my $xml = $object->_introspector->format();
print $xml, "\n";
......@@ -31,7 +31,7 @@ sub new {
return $self;
}
dbus_method("HelloWorld", ["string"], [["array", "string"]]);
dbus_method("HelloWorld", ["string"], [["array", "string"]], { param_names => ["message"], return_names => ["reply"] });
sub HelloWorld {
my $self = shift;
my $message = shift;
......
......@@ -87,7 +87,7 @@ use strict;
use warnings;
BEGIN {
our $VERSION = '0.33.5';
our $VERSION = '0.33.6';
require XSLoader;
XSLoader::load('Net::DBus', $VERSION);
}
......
This diff is collapsed.
......@@ -398,14 +398,17 @@ sub append {
my $value = shift;
my $type = shift;
if (ref($value) eq "Net::DBus::Binding::Value") {
if (ref($value) eq "Net::DBus::Binding::Value" &&
((! defined ref($type)) ||
(ref($type) ne "ARRAY") ||
$type->[0] != &Net::DBus::Binding::Message::TYPE_VARIANT)) {
$type = $value->type;
$value = $value->value;
}
if (!defined $type) {
$type = $self->guess_type($value);
}
}
if (ref($type) eq "ARRAY") {
my $maintype = $type->[0];
......
......@@ -119,23 +119,32 @@ sub _dbus_dump_introspector {
my @data;
push @data, "Object: ", $ins->get_object_path, "\n";
foreach my $interface ($ins->list_interfaces) {
foreach my $interface (sort { $a cmp $b } $ins->list_interfaces) {
push @data, " Interface: ", $interface, "\n";
foreach my $method ($ins->list_methods($interface)) {
foreach my $method (sort {$a cmp $b } $ins->list_methods($interface)) {
push @data, " Method: ", $method, "\n";
my @paramnames = $ins->get_method_param_names($interface, $method);
foreach my $param ($ins->get_method_params($interface, $method)) {
push @data, &_dbus_dump_types(" > ", $param);
my $name = @paramnames ? shift @paramnames : undef;
push @data, &_dbus_dump_types(" > ", $param, $name);
}
my @returnnames = $ins->get_method_return_names($interface, $method);
foreach my $param ($ins->get_method_returns($interface, $method)) {
push @data, &_dbus_dump_types(" < ", $param);
my $name = @returnnames ? shift @returnnames : undef;
push @data, &_dbus_dump_types(" < ", $param, $name);
}
}
foreach my $signal ($ins->list_signals($interface)) {
foreach my $signal (sort { $a cmp $b } $ins->list_signals($interface)) {
push @data, " Signal: ", $signal, "\n";
my @paramnames = $ins->get_signal_param_names($interface, $signal);
foreach my $param ($ins->get_signal_params($interface, $signal)) {
push @data, &_dbus_dump_types(" > ", $param);
my $name = @paramnames ? shift @paramnames : undef;
push @data, &_dbus_dump_types(" > ", $param, $name);
}
}
foreach my $child (sort { $a cmp $b } $ins->list_children()) {
push @data, " Child: ", $child, "\n";
}
}
return @data;
}
......@@ -143,15 +152,25 @@ sub _dbus_dump_introspector {
sub _dbus_dump_types {
my $indent = shift;
my $type = shift;
my $name = shift;
my @data;
push @data, $indent;
if (ref($type)) {
push @data, $indent, $type->[0], "\n";
push @data, $type->[0];
if (defined $name) {
push @data, " ($name)";
}
push @data, "\n";
for (my $i = 1 ; $i <= $#{$type} ; $i++) {
push @data, &_dbus_dump_types($indent . " ", $type->[$i]);
}
} else {
push @data, $indent, $type, "\n";
push @data, $type;
if (defined $name) {
push @data, " ($name)";
}
push @data, "\n";
}
return @data;
}
......
......@@ -215,11 +215,21 @@ not to expect / wait for a reply message
=item deprecated
Indicate that use of this method/signal/property is discouraged, and
Indicate that use of this method/signal/property is discouraged, and
it may disappear altogether in a future release. Clients will typically
print out a warning message when a deprecated method/signal/property
is used.
=item param_names
An array of strings specifying names for the input parameters of the
method or signal. If omitted, no names will be assigned.
=item return_names
An array of strings specifying names for the return parameters of the
method. If omitted, no names will be assigned.
=back
=head1 METHODS
......@@ -270,14 +280,8 @@ sub import {
}
sub _dbus_introspector {
my $object = shift;
my $class = shift;
$class = ref($object) unless $class;
die "no introspection data available for '" .
$object->get_object_path .
"' and object is not cast to any interface" unless $class;
if (!exists $dbus_exports{$class}) {
# If this class has not been exported, lets look
# at the parent class & return its introspection
......@@ -291,7 +295,7 @@ sub _dbus_introspector {
# choice of not supporting introspection
next if $parent eq "Net::DBus::Object";
my $ins = &_dbus_introspector($object, $parent);
my $ins = &_dbus_introspector($parent);
if ($ins) {
return $ins;
}
......@@ -301,9 +305,8 @@ sub _dbus_introspector {
}
unless (exists $dbus_introspectors{$class}) {
my $is = Net::DBus::Binding::Introspector->new(object_path => $object->get_object_path);
&_dbus_introspector_add(ref($object), $is);
my $is = Net::DBus::Binding::Introspector->new();
&_dbus_introspector_add($class, $is);
$dbus_introspectors{$class} = $is;
}
......@@ -317,16 +320,16 @@ sub _dbus_introspector_add {
my $exports = $dbus_exports{$class};
if ($exports) {
foreach my $method (keys %{$exports->{methods}}) {
my ($params, $returns, $interface, $attributes) = @{$exports->{methods}->{$method}};
$introspector->add_method($method, $params, $returns, $interface, $attributes);
my ($params, $returns, $interface, $attributes, $paramnames, $returnnames) = @{$exports->{methods}->{$method}};
$introspector->add_method($method, $params, $returns, $interface, $attributes, $paramnames, $returnnames);
}
foreach my $prop (keys %{$exports->{props}}) {
my ($type, $access, $interface, $attributes) = @{$exports->{props}->{$prop}};
$introspector->add_property($prop, $type, $access, $interface, $attributes);
}
foreach my $signal (keys %{$exports->{signals}}) {
my ($params, $interface, $attributes) = @{$exports->{signals}->{$signal}};
$introspector->add_signal($signal, $params, $interface, $attributes);
my ($params, $interface, $attributes, $paramnames) = @{$exports->{signals}->{$signal}};
$introspector->add_signal($signal, $params, $interface, $attributes, $paramnames);
}
}
......@@ -382,8 +385,19 @@ sub dbus_method {
if (!$interface) {
die "interface not specified & no default interface defined";
}
$dbus_exports{$caller}->{methods}->{$name} = [$params, $returns, $interface, \%attributes];
my $param_names = [];
if ( $attributes{param_names} ) {
$param_names = $attributes{param_names} if ref($attributes{param_names}) eq "ARRAY";
delete($attributes{param_names});
}
my $return_names = [];
if ( $attributes{return_names} ) {
$return_names = $attributes{return_names} if ref($attributes{return_names}) eq "ARRAY";
delete($attributes{return_names});
}
$dbus_exports{$caller}->{methods}->{$name} = [$params, $returns, $interface, \%attributes, $param_names, $return_names];
}
......@@ -406,7 +420,7 @@ sub dbus_property {
my $interface = $dbus_exports{$caller}->{interface};
my %attributes;
if (@_ && !ref($_[0])) {
if (@_ && (!ref($_[0]) || (ref($_[0]) eq "ARRAY"))) {
$type = shift;
}
if (@_ && !ref($_[0])) {
......@@ -422,14 +436,14 @@ sub dbus_property {
if (!$interface) {
die "interface not specified & no default interface defined";
}
$dbus_exports{$caller}->{props}->{$name} = [$type, $access, $interface, \%attributes];
}
=item dbus_signal($name, $params);
=item dbus_signal($name, $params, [\%attributes]);
=item dbus_signal($name, $params, $interface);
=item dbus_signal($name, $params, $interface, [\%attributes]);
Exports a signal called C<$name>, having parameters whose types
are defined by C<$params>, and returning values whose types are
......@@ -464,7 +478,13 @@ sub dbus_signal {
die "interface not specified & no default interface defined";
}
$dbus_exports{$caller}->{signals}->{$name} = [$params, $interface, \%attributes];
my $param_names = [];
if ( $attributes{param_names} ) {
$param_names = $attributes{param_names} if ref($attributes{param_names}) eq "ARRAY";