ussdd support
authorkibergus <kibergus@gmail.com>
Tue, 8 Jun 2010 18:27:57 +0000 (18:27 +0000)
committerkibergus <kibergus@gmail.com>
Tue, 8 Jun 2010 18:27:57 +0000 (18:27 +0000)
git-svn-id: file:///svnroot/ussd-widget/trunk@31 d197f4d6-dc93-42ad-8354-0da1f58e353f

ussd-common/src/usr/bin/ussdquery.py

index 2a94af7..2705dad 100755 (executable)
@@ -15,6 +15,8 @@ import re
 import fcntl
 import os
 import stat
 import fcntl
 import os
 import stat
+import dbus
+import gobject
 
 # Needed for correct output of utf-8 symbols.
 sys.stdout=file("/dev/stdout", "wb")
 
 # Needed for correct output of utf-8 symbols.
 sys.stdout=file("/dev/stdout", "wb")
@@ -32,8 +34,9 @@ if len(sys.argv) == 1:
 "Options:\n-l language. Allowed languages: German, English, Italian, French, Spanish, Dutch, Swedish, Danish, Portuguese, Finnish, Norwegian, Greek, Turkish, Reserved1, Reserved2, Unspecified\n"+\
 "-r retry count. 0 default. Use -1 for infinite.\n-f If specified, errors, which occur on last query are threated as fatal\n"+\
 "-t timeout in seconds. Default 30. Timeout is considered to be critical error because you can't be sure answer for what request was returned.\n"+\
 "Options:\n-l language. Allowed languages: German, English, Italian, French, Spanish, Dutch, Swedish, Danish, Portuguese, Finnish, Norwegian, Greek, Turkish, Reserved1, Reserved2, Unspecified\n"+\
 "-r retry count. 0 default. Use -1 for infinite.\n-f If specified, errors, which occur on last query are threated as fatal\n"+\
 "-t timeout in seconds. Default 30. Timeout is considered to be critical error because you can't be sure answer for what request was returned.\n"+\
-"-d delimeter. Default is '\\n> '"+\
+"-d delimeter. Default is '\\n> \n'"+\
 "-m gain modem lock imidiately '"+\
 "-m gain modem lock imidiately '"+\
+"-s show GUI message box on last reply"+\
 "For USSD menu navigation divide USSD number via spacebars for every next menu selection. Type exit in interactive mode to exit."
     sys.exit()
 
 "For USSD menu navigation divide USSD number via spacebars for every next menu selection. Type exit in interactive mode to exit."
     sys.exit()
 
@@ -112,6 +115,7 @@ allow_last_error = True
 delimiter = "\n> "
 language = 15
 timeout = 30
 delimiter = "\n> "
 language = 15
 timeout = 30
+show_qussd = False
 
 if sys.argv[1] == "interactive":
        number = "interactive"
 
 if sys.argv[1] == "interactive":
        number = "interactive"
@@ -145,6 +149,9 @@ while arg < len(sys.argv)-1:
                if sys.argv[arg] == "-f":
                        allow_last_error = False
                        continue
                if sys.argv[arg] == "-f":
                        allow_last_error = False
                        continue
+               if sys.argv[arg] == "-s":
+                       show_qussd = True
+                       continue
                if sys.argv[arg] == "-m":
                        modem = init_modem(modem)
                        continue
                if sys.argv[arg] == "-m":
                        modem = init_modem(modem)
                        continue
@@ -165,8 +172,7 @@ while arg < len(sys.argv)-1:
                elif sys.argv[arg] == "Swedish":
                        language = 6
                elif sys.argv[arg] == "Danish":
                elif sys.argv[arg] == "Swedish":
                        language = 6
                elif sys.argv[arg] == "Danish":
-                       lang                            std::cerr << reply.data();
-uage = 7
+                       language = 7
                elif sys.argv[arg] == "Portuguese":
                        language = 8
                elif sys.argv[arg] == "Finnish":
                elif sys.argv[arg] == "Portuguese":
                        language = 8
                elif sys.argv[arg] == "Finnish":
@@ -226,6 +232,10 @@ if retry == -1:
 else:
        retry_forever = False
 
 else:
        retry_forever = False
 
+bus = dbus.SystemBus()
+ussdd = bus.get_object("su.kibergus.ussdd", "/su/kibergus/ussdd")
+ussdd_int = dbus.Interface(ussdd, "su.kibergus.ussdd")
+
 # Now we are ready to send commands
 
 stage = 0
 # Now we are ready to send commands
 
 stage = 0
@@ -254,6 +264,9 @@ while number == "interactive" or stage < len(number):
                break
 
        try :
                break
 
        try :
+               if number != "interactive" and not show_qussd or stage != len(number)-1:
+                       ussdd_int.skip_next()
+
                modem.send('at+cusd=1,"'+cnumber+'",'+str(language)+'\r')
                # Read our query echoed back
                modem.readline()
                modem.send('at+cusd=1,"'+cnumber+'",'+str(language)+'\r')
                # Read our query echoed back
                modem.readline()
@@ -266,11 +279,13 @@ while number == "interactive" or stage < len(number):
        except pexpect.TIMEOUT:
                print >> sys.stderr, "Timeout. Modem didn't reply."
                close_modem (modem)
        except pexpect.TIMEOUT:
                print >> sys.stderr, "Timeout. Modem didn't reply."
                close_modem (modem)
+               ussdd_int.show_next()
                sys.exit (-2)
 
        if replystring.strip() == "ERROR" :
                retry -= 1
                print >> sys.stderr, "Modem returned ERROR. Query not executed."
                sys.exit (-2)
 
        if replystring.strip() == "ERROR" :
                retry -= 1
                print >> sys.stderr, "Modem returned ERROR. Query not executed."
+               ussdd_int.show_next()
                continue
 
        try:
                continue
 
        try: