ソースを参照

removed mi support, default control is done with rpc over datagram unixsocket

- mi was removed from kamailio 5.0
Daniel-Constantin Mierla 8 年 前
コミット
145031d1b5
5 ファイル変更16 行追加135 行削除
  1. 0 4
      README.md
  2. 0 1
      kamcli/cli.py
  3. 0 30
      kamcli/commands/cmd_mi.py
  4. 9 87
      kamcli/iorpc.py
  5. 7 13
      kamcli/kamcli.ini

+ 0 - 4
README.md

@@ -185,10 +185,6 @@ kamcli -d --config=kamcli/kamcli.ini subscriber add -t no test02 test02
 kamcli -d --config=kamcli/kamcli.ini subscriber setattrs test01 rpid +123
 kamcli -d --config=kamcli/kamcli.ini subscriber setattrs test01 rpid +123
 kamcli -d --config=kamcli/kamcli.ini subscriber setattrnull test01 rpid
 kamcli -d --config=kamcli/kamcli.ini subscriber setattrnull test01 rpid
 
 
-kamcli -d --config=kamcli/kamcli.ini mi
-kamcli -d --config=kamcli/kamcli.ini mi which
-kamcli -d --config=kamcli/kamcli.ini mi get_statistics all
-
 kamcli -d --config=kamcli/kamcli.ini jsonrpc --help
 kamcli -d --config=kamcli/kamcli.ini jsonrpc --help
 kamcli -d --config=kamcli/kamcli.ini jsonrpc core.psx
 kamcli -d --config=kamcli/kamcli.ini jsonrpc core.psx
 kamcli -d --config=kamcli/kamcli.ini jsonrpc system.listMethods
 kamcli -d --config=kamcli/kamcli.ini jsonrpc system.listMethods

+ 0 - 1
kamcli/cli.py

@@ -57,7 +57,6 @@ CONTEXT_SETTINGS = dict(auto_envvar_prefix='KAMCLI')
 
 
 COMMAND_ALIASES = {
 COMMAND_ALIASES = {
     "subs": "subscriber",
     "subs": "subscriber",
-    "fifo": "mi",
     "rpc":  "jsonrpc",
     "rpc":  "jsonrpc",
 }
 }
 
 

+ 0 - 30
kamcli/commands/cmd_mi.py

@@ -1,30 +0,0 @@
-import os
-import sys
-import click
-from kamcli.cli import pass_context
-from kamcli.iorpc import command_ctl_name
-from kamcli.iorpc import command_mi_fifo
-
[email protected]('mi', short_help='Execute raw MI command')
[email protected]('dryrun', '--dry-run', is_flag=True,
-            help='Do not execute the command, only print it')
[email protected]('cmd', nargs=1, metavar='[<command>]')
[email protected]('params', nargs=-1, metavar='[<params>]')
-@pass_context
-def cli(ctx, dryrun, cmd, params):
-    """Execute raw MI command
-
-        \b
-        Command alias: fifo
-        Parameters:
-            - <command> - the MI command
-            - <params>  - parameters for command
-        Examples:
-            - mi uptime
-            - mi ps
-    """
-    ctx.log("Running MI command: [%s]", cmd)
-    command_mi_fifo(ctx, dryrun, ctx.gconfig.get('mi', 'path'),
-                ctx.gconfig.get('mi', 'rplnamebase'), "raw",
-                cmd, params)
-

+ 9 - 87
kamcli/iorpc.py

@@ -22,64 +22,50 @@ except ImportError, e:
 # RPC/MI commands aliases
 # RPC/MI commands aliases
 #
 #
 # "alias" : {
 # "alias" : {
-#    "mi": "mi command",
 #    "rpc": "rpc command",
 #    "rpc": "rpc command",
 # }
 # }
 #
 #
 # - alias is used inside Python function
 # - alias is used inside Python function
-# - command_ctl(...) will use mi or rpc variant
+# - command_ctl(...) will use rpc variant
 #   based on config options
 #   based on config options
 COMMAND_NAMES = {
 COMMAND_NAMES = {
     "dispatcher.list": {
     "dispatcher.list": {
-        "mi": "ds_list",
         "rpc": "dispatcher.list",
         "rpc": "dispatcher.list",
     },
     },
     "dispatcher.reload": {
     "dispatcher.reload": {
-        "mi": "ds_reload",
         "rpc": "dispatcher.reload",
         "rpc": "dispatcher.reload",
     },
     },
     "permissions.addressDump": {
     "permissions.addressDump": {
-        "mi": "address_dump",
         "rpc": "permissions.addressDump",
         "rpc": "permissions.addressDump",
     },
     },
     "permissions.addressReload": {
     "permissions.addressReload": {
-        "mi": "address_reload",
         "rpc": "permissions.addressReload",
         "rpc": "permissions.addressReload",
     },
     },
     "permissions.domainDump": {
     "permissions.domainDump": {
-        "mi": "perm_domain_dump",
         "rpc": "permissions.domainDump",
         "rpc": "permissions.domainDump",
     },
     },
     "permissions.subnetDump": {
     "permissions.subnetDump": {
-        "mi": "subnet_dump",
         "rpc": "permissions.subnetDump",
         "rpc": "permissions.subnetDump",
     },
     },
     "stats.clear_statistics": {
     "stats.clear_statistics": {
-        "mi": "clear_statistics",
         "rpc": "stats.clear_statistics",
         "rpc": "stats.clear_statistics",
     },
     },
     "stats.get_statistics": {
     "stats.get_statistics": {
-        "mi": "get_statistics",
         "rpc": "stats.get_statistics",
         "rpc": "stats.get_statistics",
     },
     },
     "stats.reset_statistics": {
     "stats.reset_statistics": {
-        "mi": "reset_statistics",
         "rpc": "stats.reset_statistics",
         "rpc": "stats.reset_statistics",
     },
     },
     "ul.add": {
     "ul.add": {
-        "mi": "ul_add",
         "rpc": "ul.add",
         "rpc": "ul.add",
     },
     },
     "ul.dump": {
     "ul.dump": {
-        "mi": "ul_dump",
         "rpc": "ul.dump",
         "rpc": "ul.dump",
     },
     },
     "ul.rm": {
     "ul.rm": {
-        "mi": "ul_rm",
         "rpc": "ul.rm",
         "rpc": "ul.rm",
     },
     },
     "ul.lookup": {
     "ul.lookup": {
-        "mi": "ul_show_contact",
         "rpc": "ul.lookup",
         "rpc": "ul.lookup",
     }
     }
 }
 }
@@ -93,10 +79,7 @@ def command_ctl_name(alias, ctype):
     if v == None:
     if v == None:
         return alias
         return alias
 
 
-    if ctype == "mi":
-        return COMMAND_NAMES[alias]['mi'];
-    else:
-        return COMMAND_NAMES[alias]['rpc']
+    return COMMAND_NAMES[alias]['rpc']
 
 
 
 
 ##
 ##
@@ -182,62 +165,6 @@ class IOFifoThread (threading.Thread):
             command_ctl_response(self.ctx, rdata, self.oformat, self.cbexec)
             command_ctl_response(self.ctx, rdata, self.oformat, self.cbexec)
 
 
 
 
-##
-# :command:reply_fifo
-# p1
-# p2
-# p3
-# _empty_line_
-def command_mi_fifo(ctx, dryrun, sndpath, rcvname, oformat, cmd, params=[], cbexec={}):
-    scmd = ":" + cmd + ":" + rcvname + "\n"
-    for p in params:
-        if type(p) is int:
-            scmd += str(p) + "\n"
-        elif type(p) is float:
-            scmd += str(p) + "\n"
-        else:
-            if p == '':
-                scmd += ".\n"
-            else:
-                scmd += p + "\n"
-    scmd += "\n"
-    if dryrun:
-        print
-        print scmd
-        return
-
-    rcvpath = ctx.gconfig.get('mi', 'rpldir') + "/" + rcvname
-    if os.path.exists(rcvpath):
-        if stat.S_ISFIFO(os.stat(rcvpath).st_mode):
-            os.unlink(rcvpath)
-        else:
-            ctx.log("File with same name as reply fifo exists")
-            sys.exit()
-
-    os.mkfifo(rcvpath, 0666)
-    os.chmod(rcvpath, 0666)
-    # create new thread to read from reply fifo
-    tiofifo = IOFifoThread(ctx, rcvpath, oformat)
-    # start new threadd
-    tiofifo.start()
-
-    w = os.open(sndpath, os.O_WRONLY)
-    os.write(w, scmd)
-
-    waitrun = True
-    while waitrun:
-        try:
-            tiofifo.join(500)
-            if not tiofifo.isAlive():
-                waitrun = False
-                break
-        except KeyboardInterrupt:
-            ctx.log("Ctrl-c received! Sending kill to threads...")
-            tiofifo.stop_signal = True
-
-    os.unlink(rcvpath)
-
-
 ##
 ##
 #{
 #{
 # "jsonrpc": "2.0",
 # "jsonrpc": "2.0",
@@ -443,17 +370,12 @@ def command_ctl(ctx, cmd, params=[], cbexec={}):
                 the dictionary and its parameters by 'params' key.
                 the dictionary and its parameters by 'params' key.
     """
     """
 
 
-    if ctx.gconfig.get('ctl', 'type') == 'jsonrpc':
-        if ctx.gconfig.get('jsonrpc', 'transport') == 'socket':
-            command_jsonrpc_socket(ctx, False, ctx.gconfig.get('jsonrpc', 'srvaddr'),
-                    ctx.gconfig.get('jsonrpc', 'rcvaddr'), ctx.gconfig.get('jsonrpc', 'outformat'),
-                    command_ctl_name(cmd, 'rpc'), params, cbexec)
-        else:
-            command_jsonrpc_fifo(ctx, False, ctx.gconfig.get('jsonrpc', 'path'),
-                    ctx.gconfig.get('jsonrpc', 'rplnamebase'), ctx.gconfig.get('jsonrpc', 'outformat'),
-                    command_ctl_name(cmd, 'rpc'), params, cbexec)
+    if ctx.gconfig.get('jsonrpc', 'transport') == 'socket':
+        command_jsonrpc_socket(ctx, False, ctx.gconfig.get('jsonrpc', 'srvaddr'),
+                ctx.gconfig.get('jsonrpc', 'rcvaddr'), ctx.gconfig.get('jsonrpc', 'outformat'),
+                command_ctl_name(cmd, 'rpc'), params, cbexec)
     else:
     else:
-        command_mi_fifo(ctx, False, ctx.gconfig.get('mi', 'path'),
-                ctx.gconfig.get('mi', 'rplnamebase'), "raw",
-                command_ctl_name(cmd, 'mi'), params, cbexec)
+        command_jsonrpc_fifo(ctx, False, ctx.gconfig.get('jsonrpc', 'path'),
+                ctx.gconfig.get('jsonrpc', 'rplnamebase'), ctx.gconfig.get('jsonrpc', 'outformat'),
+                command_ctl_name(cmd, 'rpc'), params, cbexec)
 
 

+ 7 - 13
kamcli/kamcli.ini

@@ -3,6 +3,7 @@
 ; SIP domain to be used when an AoR has no domain
 ; SIP domain to be used when an AoR has no domain
 domain=test.com
 domain=test.com
 
 
+
 ### database connectivity - URLs are used for SQL Alchemy
 ### database connectivity - URLs are used for SQL Alchemy
 [db]
 [db]
 ; type of database
 ; type of database
@@ -25,35 +26,28 @@ ropassword=kamailioro
 rwurl=%(type)s+%(driver)s://%(rwuser)s:%(rwpassword)s@%(host)s/%(dbname)s
 rwurl=%(type)s+%(driver)s://%(rwuser)s:%(rwpassword)s@%(host)s/%(dbname)s
 rourl=%(type)s+%(driver)s://%(rouser)s:%(ropassword)s@%(host)s/%(dbname)s
 rourl=%(type)s+%(driver)s://%(rouser)s:%(ropassword)s@%(host)s/%(dbname)s
 
 
+
 ### control tool settings
 ### control tool settings
 [ctl]
 [ctl]
-; type - can be: mi or jsonrpc
+; type - can be: jsonrpc
 type=jsonrpc
 type=jsonrpc
 
 
-### mi settings
-[mi]
-; transport - can be: fifo
-transport=fifo
-; path - where kamailio is listening for MI FIFO commands
-path=/var/run/kamailio/kamailio_fifo
-rplnamebase=kamailio_fifo_reply
-rpldir=/tmp
 
 
 ### jsonrpc settings
 ### jsonrpc settings
 [jsonrpc]
 [jsonrpc]
 ; transport - can be: fifo, socket
 ; transport - can be: fifo, socket
 transport=socket
 transport=socket
 ; path - where kamailio is listening for JSONRPC FIFO commands
 ; path - where kamailio is listening for JSONRPC FIFO commands
-path=/var/run/kamailio/kamailio_jsonrpc_fifo
-rplnamebase=kamailio_json_fifo_reply
+path=/var/run/kamailio/kamailio_rpc.fifo
+rplnamebase=kamailio_rpc_reply.fifo
 rpldir=/tmp
 rpldir=/tmp
 ; srvaddr - where kamailio is listening for JSONRPC socket commands
 ; srvaddr - where kamailio is listening for JSONRPC socket commands
 ;   - it has to be a path to unix socket file or udp:ipaddr:port
 ;   - it has to be a path to unix socket file or udp:ipaddr:port
-srvaddr=/tmp/kamailio_jsonrpc.sock
+srvaddr=/var/run/kamailio/kamailio_rpc.sock
 ; rcvaddr - where kamclie is listening for the JSONRPC responses
 ; rcvaddr - where kamclie is listening for the JSONRPC responses
 ;   - it has to be a path to unix socket file or udp:ipaddr:port
 ;   - it has to be a path to unix socket file or udp:ipaddr:port
 ;   - pid of kamcli is added at the end to allow multiple use at same time
 ;   - pid of kamcli is added at the end to allow multiple use at same time
-rcvaddr=/tmp/kamailio_jsonrpc.sock
+rcvaddr=/var/run/kamailio/kamailio_rpc.sock
 ; outformat - how RPC result is printed, can be: json or yaml
 ; outformat - how RPC result is printed, can be: json or yaml
 ; - yaml is more compact output
 ; - yaml is more compact output
 outformat=yaml
 outformat=yaml