main: Support NetworkInterfaceBlacklist from main.conf
[framework/connectivity/connman.git] / test / simple-agent
index 38b6e41..45437df 100755 (executable)
@@ -10,7 +10,12 @@ import sys
 class Canceled(dbus.DBusException):
        _dbus_error_name = "net.connman.Error.Canceled"
 
+class LaunchBrowser(dbus.DBusException):
+       _dbus_error_name = "net.connman.Agent.Error.LaunchBrowser"
+
 class Agent(dbus.service.Object):
+       name = None
+       ssid = None
        identity = None
        passphrase = None
        wpspin = None
@@ -27,17 +32,18 @@ class Agent(dbus.service.Object):
                response = {}
 
                if not self.identity and not self.passphrase and not self.wpspin:
+                       print "Service credentials requested, type cancel to cancel"
                        args = raw_input('Answer: ')
 
                        for arg in args.split():
+                               if arg.startswith("cancel"):
+                                       response["Error"] = arg
                                if arg.startswith("Identity="):
                                        identity = arg.replace("Identity=", "", 1)
                                        response["Identity"] = identity
-                                       break
                                if arg.startswith("Passphrase="):
                                        passphrase = arg.replace("Passphrase=", "", 1)
                                        response["Passphrase"] = passphrase
-                                       break
                                if arg.startswith("WPS="):
                                        wpspin = arg.replace("WPS=", "", 1)
                                        response["WPS"] = wpspin
@@ -56,17 +62,19 @@ class Agent(dbus.service.Object):
                response = {}
 
                if not self.username and not self.password:
+                       print "User login requested, type cancel to cancel"
+                       print "or browser to login through the browser by yourself."
                        args = raw_input('Answer: ')
 
                        for arg in args.split():
+                               if arg.startswith("cancel") or arg.startswith("browser"):
+                                       response["Error"] = arg
                                if arg.startswith("Username="):
                                        username = arg.replace("Username=", "", 1)
                                        response["Username"] = username
-                                       break
                                if arg.startswith("Password="):
                                        password = arg.replace("Password=", "", 1)
                                        response["Password"] = password
-                                       break
                else:
                        if self.username:
                                response["Username"] = self.username
@@ -75,20 +83,51 @@ class Agent(dbus.service.Object):
 
                return response
 
+       def input_hidden(self):
+               response = {}
+
+               if not self.name and not self.ssid:
+                       args = raw_input('Answer ')
+
+                       for arg in args.split():
+                               if arg.startswith("Name="):
+                                       name = arg.replace("Name=", "", 1)
+                                       response["Name"] = name
+                                       break
+                               if arg.startswith("SSID="):
+                                       ssid = arg.replace("SSID", "", 1)
+                                       response["SSID"] = ssid
+                                       break
+               else:
+                       if self.name:
+                               response["Name"] = self.name
+                       if self.ssid:
+                               response["SSID"] = self.ssid
+
+               return response
+
        @dbus.service.method("net.connman.Agent",
                                        in_signature='oa{sv}',
                                        out_signature='a{sv}')
        def RequestInput(self, path, fields):
                print "RequestInput (%s,%s)" % (path, fields)
 
-               response = None
+               response = {}
 
+               if fields.has_key("Name"):
+                       response.update(self.input_hidden())
                if fields.has_key("Passphrase"):
-                       response = self.input_passphrase()
-               elif fields.has_key("Username"):
-                       response = self.input_username()
-               else:
-                       print "No method to answer the input request"
+                       response.update(self.input_passphrase())
+               if fields.has_key("Username"):
+                       response.update(self.input_username())
+
+               if response.has_key("Error"):
+                       if response["Error"] == "cancel":
+                               raise Canceled("canceled")
+                               return
+                       if response["Error"] == "browser":
+                               raise LaunchBrowser("launch browser")
+                               return
 
                print "returning (%s)" % (response)
 
@@ -132,6 +171,8 @@ class Agent(dbus.service.Object):
 
 def print_usage():
        print "Usage:"
+       print "For hidden service:"
+       print "%s Name=<hidden service name> [SSID=<hidden ssid>]" % (sys.argv[0])
        print "For EAP/WPA input:"
        print "%s Identity=<identity> Passphrase=<passphrase> WPS=<wpspin>" % (sys.argv[0])
        print "For WISPr login input:"
@@ -154,7 +195,11 @@ if __name__ == '__main__':
 
        if len(sys.argv) >= 2:
                for arg in sys.argv[1:]:
-                       if arg.startswith("Identity="):
+                       if arg.startswith("Name="):
+                               object.name = arg.replace("Name=", "", 1)
+                       elif arg.startswith("SSID="):
+                               object.ssid = arg.replace("SSID=", "", 1)
+                       elif arg.startswith("Identity="):
                                object.identity = arg.replace("Identity=", "", 1)
                        elif arg.startswith("Passphrase="):
                                object.passphrase = arg.replace("Passphrase=", "", 1)