diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2012-12-10 23:01:18 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-12-10 23:01:18 +0100 |
commit | f37facb3bd7c53d3b7629cb53b22a05a952bfa27 (patch) | |
tree | 8ae884f60c8a9b788353d9049de23084782ccc95 /test/simple-obex-agent | |
parent | 7ca701a6120778fb65905f02305963b79ff6d8de (diff) | |
download | bluez-f37facb3bd7c53d3b7629cb53b22a05a952bfa27.tar.gz |
test: Add test scripts from obexd repository
Diffstat (limited to 'test/simple-obex-agent')
-rwxr-xr-x | test/simple-obex-agent | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/test/simple-obex-agent b/test/simple-obex-agent new file mode 100755 index 000000000..19020820d --- /dev/null +++ b/test/simple-obex-agent @@ -0,0 +1,132 @@ +#!/usr/bin/python + +import gobject + +import sys +import dbus +import dbus.service +import dbus.mainloop.glib + +class Agent(dbus.service.Object): + def __init__(self, conn=None, obj_path=None): + dbus.service.Object.__init__(self, conn, obj_path) + self.pending_auth = False + + @dbus.service.method("org.bluez.obex.Agent", in_signature="osssii", + out_signature="s") + def Authorize(self, dpath, device, filename, ftype, length, time): + global transfers + + self.pending_auth = True + print "Authorize (%s, %s, %s) Y/n" % (path, device, filename) + auth = raw_input().strip("\n ") + + if auth == "n" or auth == "N": + self.pending_auth = False + raise dbus.DBusException( + "org.bluez.obex.Error.Rejected: " + "Not Autorized") + + print "Full filename (including path):" + self.pending_auth = False + + transfers.append(Transfer(dpath, filename, 0, length)) + return raw_input().strip("\n ") + + @dbus.service.method("org.bluez.obex.Agent", in_signature="", + out_signature="") + def Cancel(self): + print "Authorization Canceled" + self.pending_auth = False + + +class Transfer(object): + def __init__(self, dpath, filename=None, transfered=-1, size=-1): + self.dpath = dpath + self.filename = filename + self.transfered = transfered + self.size = size + + def update(self, filename=None, transfered=-1, total=-1): + if filename: + self.filename = filename + self.transfered = transfered + self.size = total + + def cancel(self): + transfer_iface = dbus.Interface(bus.get_object( + "org.bluez.obex", self.dpath), + "org.bluez.obex.Transfer") + transfer_iface.Cancel() + + def __str__(self): + p = float(self.transfered) / float(self.size) * 100 + return "%s (%s) (%.2f%%)" % (self.filename, self.dpath, p) + + __repr__ = __str__ + + +if __name__ == '__main__': + global transfers + + def new_transfer(dpath): + print "new transfer" + bus.add_signal_receiver(progress, + dbus_interface="org.bluez.obex.Transfer", + signal_name="Progress", + path_keyword="dpath") + + def transfer_completed(dpath, success): + global transfers + + print "\ntransfer completed => %s" % (success and "Success" or "Fail") + transfers = [t for t in transfers if t.dpath != dpath] + + def progress(total, current, dpath): + s = [] + for t in transfers: + if t.dpath == dpath: + t.update(None, current, total) + s.append("%s" % (t)) + sys.stdout.write(" ".join(s) + "\r") + sys.stdout.flush() + + + transfers = [] + + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + bus = dbus.SessionBus() + manager = dbus.Interface(bus.get_object("org.bluez.obex", "/"), + "org.bluez.obex.Manager") + bus.add_signal_receiver(new_transfer, + dbus_interface="org.bluez.obex.Manager", + signal_name="TransferStarted") + + bus.add_signal_receiver(transfer_completed, + dbus_interface="org.bluez.obex.Manager", + signal_name="TransferCompleted") + + path = "/test/agent" + agent = Agent(bus, path) + + mainloop = gobject.MainLoop() + + manager.RegisterAgent(path) + print "Agent registered" + + cont = True + while cont: + try: + mainloop.run() + except KeyboardInterrupt: + if agent.pending_auth: + agent.Cancel() + elif len(transfers) > 0: + for a in transfers: + a.cancel() + else: + cont = False + + # manager.UnregisterAgent(path) + # print "Agent unregistered" |