diff options
| -rw-r--r-- | hcid/Makefile.am | 4 | ||||
| -rwxr-xr-x | hcid/dbus-test | 432 | ||||
| -rw-r--r-- | hcid/dbus-test.c | 29 | 
3 files changed, 30 insertions, 435 deletions
| diff --git a/hcid/Makefile.am b/hcid/Makefile.am index 3c3c52b1..0aa78cbb 100644 --- a/hcid/Makefile.am +++ b/hcid/Makefile.am @@ -17,15 +17,13 @@ sbin_PROGRAMS = hcid  noinst_PROGRAMS = passkey-agent -noinst_SCRIPTS = dbus-test -  hcid_SOURCES = main.c security.c device.c logging.c storage.c \  		sdp.c sdp.h hcid.h parser.h parser.y \  		lexer.l kword.c kword.h \  		dbus.h dbus.c dbus-common.c \  		dbus-error.c dbus-manager.c dbus-adapter.c \  		dbus-device.c dbus-service.c dbus-security.c \ -		dbus-sdp.c dbus-rfcomm.c +		dbus-test.c dbus-sdp.c dbus-rfcomm.c  hcid_LDADD = @DBUS_LIBS@ @BLUEZ_LIBS@ $(top_builddir)/common/libhelper.a diff --git a/hcid/dbus-test b/hcid/dbus-test deleted file mode 100755 index 83988896..00000000 --- a/hcid/dbus-test +++ /dev/null @@ -1,432 +0,0 @@ -#!/usr/bin/env python - -import dbus -import dbus.decorators -import dbus.glib -import gobject -import sys -import getopt -from signal import * - -mgr_cmds = [ "InterfaceVersion", "ListAdapters", "DefaultAdapter" ] -mgr_signals = [ "AdapterAdded", "AdapterRemoved" ] - -dev_cmds = [ "GetAddress", -             "GetVersion", -             "GetRevision", -             "GetManufacturer", -             "GetCompany", -             "GetMode", -             "SetMode", -             "GetDiscoverableTimeout", -             "SetDiscoverableTimeout", -             "IsConnectable", -             "IsDiscoverable", -             "IsConnected", -             "ListConnections", -             "GetMajorClass", -             "ListAvailableMinorClasses", -             "GetMinorClass", -             "SetMinorClass", -             "GetServiceClasses", -             "GetName", -             "SetName", -             "GetRemoteVersion", -             "GetRemoteRevision", -             "GetRemoteManufacturer", -             "GetRemoteCompany", -             "GetRemoteMajorClass", -             "GetRemoteMinorClass", -             "GetRemoteServiceClasses", -             "GetRemoteClass", -             "GetRemoteName", -             "GetRemoteAlias", -             "SetRemoteAlias", -             "ClearRemoteAlias", -             "LastSeen", -             "LastUsed", -             "DisconnectRemoteDevice", -             "CreateBonding", -             "CancelBondingProcess", -             "RemoveBonding", -             "HasBonding", -             "ListBondings", -             "GetPinCodeLength", -             "GetEncryptionKeySize", -             "DiscoverDevices", -             "DiscoverDevicesWithoutNameResolving", -             "CancelDiscovery" ] -dev_signals = [ "ModeChanged", -                "NameChanged", -                "MinorClassChanged", -                "DiscoveryStarted", -                "DiscoveryCompleted", -                "RemoteDeviceFound", -                "RemoteNameUpdated", -                "RemoteNameFailed", -                "RemoteAliasChanged" -                "RemoteAliasCleared", -                "RemoteDeviceConnected", -                "RemoteDeviceDisconnected", -                "BondingCreated", -                "BondingRemoved" ] - -dev_signals_filter = [ "/org/bluez/hci0", "/org/bluez/hci1", -                       "/org/bluez/hci2", "/org/bluez/hci3", -                       "/org/bluez/hci4", "/org/bluez/hci5", -                       "/org/bluez/hci6", "/org/bluez/hci7" ] - -class Tester: -    exit_events = [] -    dev_path = None -    need_dev = False -    listen = False -    at_interrupt = None - -    def __init__(self, argv): -        self.name = argv[0] - -        self.parse_args(argv[1:]) - -        try: -            self.dbus_setup() -        except dbus.DBusException, e: -            print 'Failed to do D-Bus setup: %s' % e -            sys.exit(1) - -    def parse_args(self, argv): -        try: -            opts, args = getopt.getopt(argv, "hli:") -        except getopt.GetoptError: -            self.usage() -            sys.exit(1) - -        for o, a in opts: -            if o == "-h": -                self.usage() -                sys.exit() -            elif o == "-l": -                self.listen = True -            elif o == "-i": -                if a[0] == '/': -                    self.dev_path = a -                else: -                    self.dev_path = '/org/bluez/%s' % a - -        if not (args or self.listen): -            self.usage() -            sys.exit(1) - -        if args: -            self.cmd = args[0] -            self.cmd_args = args[1:] - -    def dbus_dev_setup(self): -        if not self.dev_path: -            try: -                self.dbus_mgr_setup() -                self.dev_path = self.manager.DefaultAdapter() -            except dbus.DBusException, e: -                print 'Failed to get default device: %s' % e -                sys.exit(1) -        try: -            obj = self.bus.get_object('org.bluez', self.dev_path) -            self.device = dbus.Interface(obj, 'org.bluez.Adapter') -        except dbus.DBusException, e: -            print 'Failed to setup device path: %s' % e -            sys.exit(1) - -    def dbus_dev_sig_setup(self): -        try: -           for signal in dev_signals: -                for path in dev_signals_filter: -                    self.bus.add_signal_receiver(self.dev_signal_handler, -                                             signal, 'org.bluez.Adapter', -                                             'org.bluez', path) -        except dbus.DBusException, e: -            print 'Failed to setup signal handler for device path: %s' % e -            sys.exit(1) - -    def dbus_mgr_sig_setup(self): -        try: -            for signal in mgr_signals: -                self.bus.add_signal_receiver(self.mgr_signal_handler, -                                         signal,'org.bluez.Manager', -                                         'org.bluez', '/org/bluez') -        except dbus.DBusException, e: -            print 'Failed to setup signal handler for manager path: %s' % e -            sys.exit(1) - -    def dbus_mgr_setup(self): -        self.manager_obj = self.bus.get_object('org.bluez', '/org/bluez') -        self.manager = dbus.Interface(self.manager_obj, 'org.bluez.Manager') - -    def dbus_setup(self): -        self.bus = dbus.SystemBus() - -    def usage(self): -        print 'Usage: %s [-i <dev>] [-l] [-h] <cmd> [arg1..]' % self.name -        print '  -i <dev>   Specify device (e.g. "hci0" or "/org/bluez/hci0")' -        print '  -l         Listen for events (no command required)' -        print '  -h         Show this help' -        print 'Manager commands:' -        for cmd in mgr_cmds: -            print '\t%s' % cmd -        print 'Adapter commands:' -        for cmd in dev_cmds: -            print '\t%s' % cmd - -    @dbus.decorators.explicitly_pass_message -    def dev_signal_handler(*args, **keywords): -        dbus_message = keywords["dbus_message"] -        print '%s - %s: ' % (dbus_message.get_member(), dbus_message.get_path()), -        for arg in args[1:]: -            print '%s   ' % arg, -        print - -    @dbus.decorators.explicitly_pass_message -    def mgr_signal_handler(*args, **keywords): -        dbus_message = keywords["dbus_message"] -        print '%s: ' % dbus_message.get_member() -        for arg in args[1:]: -            print '%s   ' % arg, -        print - -    def signal_cb(self, sig, frame): -        print 'Caught signal, exiting' -        if self.at_interrupt: -            self.at_interrupt() -        self.main_loop.quit() - -    def call_mgr_dbus_func(self): -        if self.cmd == 'InterfaceVersion': -            try: -                print self.manager.InterfaceVersion() -            except dbus.DBusException, e: -                print 'Sending %s failed: %s' % (self.cmd, e) -        if self.cmd == 'ListAdapters': -            try: -                devices = self.manager.ListAdapters() -            except dbus.DBusException, e: -                print 'Sending %s failed: %s' % (self.cmd, e) -                sys.exit(1) -            for device in devices: -                print device -        elif self.cmd == 'DefaultAdapter': -            try: -                print self.manager.DefaultAdapter() -            except dbus.DBusException, e: -                print 'Sending %s failed: %s' % (self.cmd, e) -                sys.exit(1) - -    def call_dev_dbus_func(self): -       try: -           if self.cmd == 'GetAddress': -               print self.device.GetAddress() -           elif self.cmd == 'GetManufacturer': -               print self.device.GetManufacturer() -           elif self.cmd == 'GetVersion': -               print self.device.GetVersion() -           elif self.cmd == 'GetRevision': -               print self.device.GetRevision() -           elif self.cmd == 'GetCompany': -               print self.device.GetCompany() -           elif self.cmd == 'GetMode': -               print self.device.GetMode() -           elif self.cmd == 'SetMode': -               if len(self.cmd_args) == 1: -                   self.device.SetMode(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> SetMode scan_mode' % self.name -           elif self.cmd == 'GetDiscoverableTimeout': -               print '%u' % (self.device.GetDiscoverableTimeout()) -           elif self.cmd == 'SetDiscoverableTimeout': -               if len(self.cmd_args) == 1: -                   self.device.SetDiscoverableTimeout(dbus.UInt32(self.cmd_args[0])) -               else: -                   print 'Usage: %s -i <dev> SetDiscoverableTimeout timeout' % self.name -           elif self.cmd == 'IsConnectable': -               print self.device.IsConnectable() -           elif self.cmd == 'IsDiscoverable': -               print self.device.IsDiscoverable() -           elif self.cmd == 'IsConnected': -               if len(self.cmd_args) == 1: -                   print self.device.IsConnected(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> IsConnected address' % self.name -           elif self.cmd == 'ListConnections': -               print self.device.ListConnections() -           elif self.cmd == 'GetMajorClass': -               print self.device.GetMajorClass() -           elif self.cmd == 'ListAvailableMinorClasses': -               print self.device.ListAvailableMinorClasses() -           elif self.cmd == 'GetMinorClass': -               print self.device.GetMinorClass() -           elif self.cmd == 'SetMinorClass': -               if len(self.cmd_args) == 1: -                   self.device.SetMinorClass(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> SetMinorClass minor' % self.name -           elif self.cmd == 'GetServiceClasses': -               classes = self.device.GetServiceClasses() -               for clas in classes:  -                   print clas, -           elif self.cmd == 'GetName': -               print self.device.GetName() -           elif self.cmd == 'SetName': -               if len(self.cmd_args) == 1: -                   self.device.SetName(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> SetName newname' % self.name -           elif self.cmd == 'GetRemoteName': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteName(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteName address' % self.name -           elif self.cmd == 'GetRemoteVersion': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteVersion(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteVersion address' % self.name -           elif self.cmd == 'GetRemoteRevision': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteRevision(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteRevision address' % self.name -           elif self.cmd == 'GetRemoteManufacturer': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteManufacturer(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteManufacturer address' % self.name -           elif self.cmd == 'GetRemoteCompany': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteCompany(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteCompany address' % self.name -           elif self.cmd == 'GetRemoteAlias': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteAlias(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteAlias address' % self.name -           elif self.cmd == 'GetRemoteMajorClass': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteMajorClass(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteMajorClass address' % self.name -           elif self.cmd == 'GetRemoteMinorClass': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteMinorClass(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteMinorClass address' % self.name -           elif self.cmd == 'GetRemoteServiceClasses': -               if len(self.cmd_args) == 1: -                   print self.device.GetRemoteServiceClasses(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetRemoteServiceClasses address' % self.name -           elif self.cmd == 'SetRemoteAlias': -               if len(self.cmd_args) == 2: -                   self.device.SetRemoteAlias(self.cmd_args[0], self.cmd_args[1]) -               else: -                   print 'Usage: %s -i <dev> SetRemoteAlias address alias' % self.name -           elif self.cmd == 'ClearRemoteAlias': -               if len(self.cmd_args) == 1: -                   print self.device.ClearRemoteAlias(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> ClearRemoteAlias address' % self.name -           elif self.cmd == 'LastSeen': -               if len(self.cmd_args) == 1: -                   print self.device.LastSeen(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> LastSeen address' % self.name -           elif self.cmd == 'LastUsed': -               if len(self.cmd_args) == 1: -                   print self.device.LastUsed(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> LastUsed address' % self.name -           elif self.cmd == 'DisconnectRemoteDevice': -               if len(self.cmd_args) == 1: -                   print self.device.LastUsed(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> DisconnectRemoteDevice address' % self.name -           elif self.cmd == 'CreateBonding': -               if len(self.cmd_args) == 1: -                   print self.device.CreateBonding(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> CreateBonding address' % self.name -           elif self.cmd == 'RemoveBonding': -               if len(self.cmd_args) == 1: -                   print self.device.RemoveBonding(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> RemoveBonding address' % self.name -           elif self.cmd == 'CancelBondingProcess': -               if len(self.cmd_args) == 1: -                   print self.device.CancelBondingProcess(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> CancelBondingProcess address' % self.name -           elif self.cmd == 'HasBonding': -               if len(self.cmd_args) == 1: -                   print self.device.HasBonding(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> HasBonding address' % self.name -           elif self.cmd == 'ListBondings': -               bondings = self.device.ListBondings() -               for bond in bondings:  -                   print bond, -           elif self.cmd == 'GetPinCodeLength': -               if len(self.cmd_args) == 1: -                   print self.device.GetPinCodeLength(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetPinCodeLength address' % self.name -           elif self.cmd == 'GetEncryptionKeySize': -               if len(self.cmd_args) == 1: -                   print self.device.GetEncryptionKeySize(self.cmd_args[0]) -               else: -                   print 'Usage: %s -i <dev> GetEncryptionKeySize address' % self.name -           elif self.cmd == 'DiscoverDevices': -               print self.device.DiscoverDevices() -           elif self.cmd == 'DiscoverDevicesWithoutNameResolving': -               print self.device.DiscoverDevicesWithoutNameResolving() -           else: -                # FIXME: remove at future version -                print 'Script Error: Method %s not found. Maybe a mispelled word.' % (self.cmd_args) -       except dbus.DBusException, e: -           print '%s failed: %s' % (self.cmd, e) -           sys.exit(1) - -    def run(self): -        # Manager methods -        if self.listen: -            self.dbus_mgr_sig_setup() -            self.dbus_dev_sig_setup() -            print 'Listening for events...' -        elif self.cmd in mgr_cmds: -            try: -                self.dbus_mgr_setup() -            except dbus.DBusException, e: -                print 'Failed to setup manager interface: %s' % e -                sys.exit(1) -            self.call_mgr_dbus_func() -        elif self.cmd in dev_cmds: -            try: -                self.dbus_dev_setup() -            except dbus.DBusException, e: -                print 'Failed to setup device interface: %s' % e -                sys.exit(1) -            self.call_dev_dbus_func() -        else: -            print 'Unknown command: %s' % self.cmd -            self.usage() -            sys.exit(1) - -        if self.listen: -            signal(SIGINT, self.signal_cb) -            signal(SIGTERM, self.signal_cb) -            self.main_loop = gobject.MainLoop() -            self.main_loop.run() - -if __name__ == '__main__': -    gobject.threads_init() -    dbus.glib.init_threads() - -    tester = Tester(sys.argv) -    tester.run() diff --git a/hcid/dbus-test.c b/hcid/dbus-test.c new file mode 100644 index 00000000..f3bf47c4 --- /dev/null +++ b/hcid/dbus-test.c @@ -0,0 +1,29 @@ +/* + * + *  BlueZ - Bluetooth protocol stack for Linux + * + *  Copyright (C) 2004-2006  Marcel Holtmann <marcel@holtmann.org> + * + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <errno.h> | 
