浏览代码

kamctl: several control commands of kamctl made to work with mi or jsonrpc

Daniel-Constantin Mierla 8 年之前
父节点
当前提交
a255cfce90
共有 1 个文件被更改,包括 117 次插入100 次删除
  1. 117 100
      utils/kamctl/kamctl

+ 117 - 100
utils/kamctl/kamctl

@@ -170,6 +170,8 @@ require_kamcmd() {
 }
 
 CTLENGINELOADED=0
+CTLENGINETYPE=0
+
 if [ -z "$CTLENGINE" ] ; then
 	CTLENGINE="FIFO"
 fi
@@ -184,6 +186,7 @@ case $CTLENGINE in
 		if [ -f "$MYLIBDIR/kamctl.rpcfifo" ]; then
 			. "$MYLIBDIR/kamctl.rpcfifo"
 			CTLENGINELOADED=1
+			CTLENGINETYPE=1
 		fi
 		;;
 	UNIXSOCK|unixsock)
@@ -237,14 +240,14 @@ done
 }
 
 require_dbengine() {
-	if [ $DBENGINELOADED -eq 0 ] ; then 
+	if [ $DBENGINELOADED -eq 0 ] ; then
 		merr "This command requires a database engine - none was loaded"
 		exit -1
 	fi
 }
 
 require_ctlengine() {
-	if [ $CTLENGINELOADED -eq 0 ] ; then 
+	if [ $CTLENGINELOADED -eq 0 ] ; then
 		merr "This command requires a control engine - none was loaded"
 		exit -1
 	fi
@@ -261,6 +264,24 @@ require_ctlengine() {
 ### helper functions (require db and/or ctl)
 #
 
+##
+# wrapper to run MI or RPC command based on configured engine
+# - first parameter is the MI command
+# - second parameter is the RPC command
+# - the rest are the parameters for the MI/RPC command
+ctl_cmd_run () {
+	VCMDMI="$1"
+	shift
+	VCMDRPC="$1"
+	shift
+
+	if [ $CTLENGINETYPE -eq 1 ] ; then
+		$CTLCMD $VCMDRPC $@
+	else
+		$CTLCMD $VCMDMI $@
+	fi
+}
+
 lower() {
 	echo $1 | tr [A-Z] [a-z]
 }
@@ -269,7 +290,7 @@ lower() {
 # output: false if exists, true otherwise
 is_user() {
 	set_user $1
-	
+
 	QUERY="select count(*) from $SUB_TABLE where \
 $SUBSCRIBER_COLUMN='$OSERUSER' and $REALM_COLUMN='$OSERDOMAIN';"
 
@@ -289,7 +310,7 @@ is_value_in_db() {
 	TABLE=$1
 	COL=$2
 	VALUE=$3
-	
+
 	QUERY="select count(*) from $TABLE where $COL='$VALUE';"
 	CNT=`$DBROCMD "$QUERY" "$DBRAWPARAMS" | $EGREP -v ERROR | $LAST_LINE`
 	mdbg "is_value_in_db: counter=$CNT"
@@ -309,7 +330,7 @@ acl() {
 	case $1 in
 		show)
 			if [ $# -eq 2 ] ; then
-				is_user $2 
+				is_user $2
 				if [ $? -ne 0 ] ; then
 					mecho "Non-existent user '$2'. Still proceeding? [Y|N] "
 					read answer
@@ -336,7 +357,7 @@ acl() {
 				usage
 				exit 1
 			fi
-			is_user $2 
+			is_user $2
 			if [ $? -ne 0 ] ; then
 				mecho "Non-existent user '$2'. Still proceeding? [Y|N] "
 				read answer
@@ -391,7 +412,7 @@ $ACL_GROUP_COLUMN,$ACL_MODIFIED_COLUMN,$ACL_DOMAIN_COLUMN ) values \
 				merr "acl - wrong number of parameters"
 				usage_acl
 				exit 1
-			fi	
+			fi
 
 			set_user $2
 
@@ -496,7 +517,7 @@ alias_db() {
 
 	shift
 
-	case $1 in 
+	case $1 in
 		list)
 			if [ $# -eq 2 ] ; then
 				# print aliases for user
@@ -505,9 +526,9 @@ alias_db() {
 					merr "alias_db - <$2> is not a valid AoR (user@domain)"
 					exit 1
 				fi
-				
+
 				set_user $2
-				
+
 				CLAUSE="WHERE $DA_USER_COLUMN='$OSERUSER' AND \
 $DA_DOMAIN_COLUMN='$OSERDOMAIN'"
 				mecho "Dumping aliases for user=<$2>"
@@ -552,22 +573,22 @@ $DA_USER_COLUMN, $DA_DOMAIN_COLUMN FROM $DA_TABLE;"
 				usage_alias_db
 				exit 1
 			fi
-			
+
 			check_aor "$2"
 			if [ "$?" -ne "0" ] ; then
 				merr "alias_db - $2 is not a valid AoR (user@domain)"
 				exit 1
 			fi
-			
+
 			set_user $2
-			
+
 			CLAUSE="WHERE $DA_ALIAS_USER_COLUMN='$OSERUSER' AND \
 $DA_ALIAS_DOMAIN_COLUMN='$OSERDOMAIN'"
 			QUERY="SELECT CONCAT($DA_USER_COLUMN,'@',$DA_DOMAIN_COLUMN) \
 AS 'SIP-ID' FROM $DA_TABLE $CLAUSE ; "
 			$DBROCMD "$QUERY"
 			#TMP_UUID=`sql_ro_query "$QUERY" | $AWK 'BEGIN {line=0;}
-			#								/^\+/ { next } 
+			#								/^\+/ { next }
 			#								{ line++;
 			#								  if(line==2) print $1 "@" $2;}'`
 			#
@@ -599,12 +620,12 @@ AS 'SIP-ID' FROM $DA_TABLE $CLAUSE ; "
 				err "alias_db - $2 is not a valid AoR (user@domain)"
 				exit 1
 			fi
-			
+
 			set_user $1
 			TMP_OSERUSER=$OSERUSER
 			TMP_OSERDOMAIN=$OSERDOMAIN
 			set_user $2
-			
+
 			if is_value_in_db $DA_TABLE $DA_ALIAS_USER_COLUMN $TMP_OSERUSER; then
 				minfo "$TMP_OSERUSER alias already in $DA_TABLE table"
 				exit 0
@@ -618,7 +639,7 @@ $DA_ALIAS_USER_COLUMN,$DA_ALIAS_DOMAIN_COLUMN) VALUES ('$OSERUSER',\
 				merr "alias_db - SQL Error"
 				exit 1
 			fi
-			
+
 			exit $?
 			;;
 		rm)
@@ -627,9 +648,9 @@ $DA_ALIAS_USER_COLUMN,$DA_ALIAS_DOMAIN_COLUMN) VALUES ('$OSERUSER',\
 				usage_alias_db
 				exit 1
 			fi
-			
+
 			shift
-			
+
 			check_aor "$1"
 			if [ "$?" -ne "0" ] ; then
 				merr "alias_db - $1 is not a valid URI"
@@ -645,14 +666,14 @@ $DA_ALIAS_DOMAIN_COLUMN='$OSERDOMAIN'"
 				merr "alias_db - SQL Error"
 				exit 1
 			fi
-			
+
 			exit $?
 			;;
-			
+
 		help)
 			usage_alias_db "alone"
 			;;
-			
+
 		*)
 			usage_alias_db
 			exit 1
@@ -687,15 +708,15 @@ avpops() {
 		exit 1
 	fi
 
-	case $1 in 
+	case $1 in
 		list)
 			shift
 			CLAUSE=""
-			while [ "$#" != "0" ] 
+			while [ "$#" != "0" ]
 			do
 				TMP_ARG=$1
 				shift
-				case $TMP_ARG in 
+				case $TMP_ARG in
 					-T)
 						if [ -z "$1" ] ; then
 							merr "avp list - table name parameter missing"
@@ -724,7 +745,7 @@ $AVP_USER_COLUMN='$OSERUSER' AND $AVP_DOMAIN_COLUMN='$OSERDOMAIN'"
 							else
 								CLAUSE="$CLAUSE AND $AVP_UUID_COLUMN='$1'"
 							fi
-						fi				
+						fi
 					;;
 					-a)
 						if [ -z "$1" ] ; then
@@ -766,7 +787,7 @@ $AVP_USER_COLUMN='$OSERUSER' AND $AVP_DOMAIN_COLUMN='$OSERDOMAIN'"
 				esac
 				shift
 			done
-			
+
 			QUERY="SELECT $AVP_UUID_COLUMN,$AVP_USER_COLUMN,\
 $AVP_DOMAIN_COLUMN,$AVP_ATTRIBUTE_COLUMN,$AVP_TYPE_COLUMN,$AVP_VALUE_COLUMN \
 FROM $AVP_TABLE $CLAUSE;"
@@ -787,10 +808,10 @@ FROM $AVP_TABLE $CLAUSE;"
 			#			}
 			#			line++;
 			#		}'
-			
+
 			exit $?
 			;;
-			
+
 		add)
 			shift
 			if [ $# -ne 4 ] ; then
@@ -806,10 +827,10 @@ FROM $AVP_TABLE $CLAUSE;"
 					shift
 				else
 					mecho "avp add - unknown parameter '$1'"
-					exit 1					
+					exit 1
 				fi
 			fi
-						
+
 			is_aor "$1"
 			if [ "$?" -eq "0" ] ; then
 				set_user $1
@@ -830,18 +851,18 @@ VALUES ('$AVP_UUID','$OSERUSER','$OSERDOMAIN','$2',$3,'$4',$DBFNOW);"
 				echo
 				mecho "avp add - attribute added"
 			fi
-			
+
 			exit $?
 			;;
 
 		rm)
 			shift
 			CLAUSE=""
-			while [ "$#" != "0" ] 
+			while [ "$#" != "0" ]
 			do
 				TMP_ARG=$1
 				shift
-				case $TMP_ARG in 
+				case $TMP_ARG in
 					-T)
 						if [ -z "$1" ] ; then
 							merr "avp rm - table name parameter missing"
@@ -870,7 +891,7 @@ $AVP_USER_COLUMN='$OSERUSER' AND $AVP_DOMAIN_COLUMN='$OSERDOMAIN'"
 							else
 								CLAUSE="$CLAUSE AND $AVP_UUID_COLUMN='$1'"
 							fi
-						fi				
+						fi
 					;;
 					-a)
 						if [ -z "$1" ] ; then
@@ -922,14 +943,14 @@ $AVP_USER_COLUMN='$OSERUSER' AND $AVP_DOMAIN_COLUMN='$OSERDOMAIN'"
 				echo
 				mecho "avp rm - AVP(s) deleted"
 			fi
-			
+
 			exit $?
 			;;
-			
+
 		help)
 			usage_avp
 			;;
-			
+
 		*)
 			merr "avp - unknown command"
 			usage
@@ -1057,11 +1078,11 @@ domain() {
 	case $1 in
 		reload)
 			require_ctlengine
-			$CTLCMD domain_reload
+			ctl_cmd_run domain_reload domain.reload
 			;;
 		show)
 			require_ctlengine
-			$CTLCMD domain_dump
+			ctl_cmd_run domain_dump domain.dump
 			;;
 		showdb)
 			require_dbengine
@@ -1135,17 +1156,17 @@ uid_domain() {
 				merr "too few parameters"
 				exit 1
 			fi
-			
+
 			DOMAIN=$1
 			DID=$2
 			FLAGS=$3
-	
+
 			if [ -z "$2" ] ; then
 				DID=$DOMAIN
-			fi 
+			fi
 			if [ -z "$3" ] ; then
 				FLAGS=$(( $SRDB_LOAD_SER | $SRDB_CANON | $SRDB_FOR_SERWEB ))
-			fi 
+			fi
 
 			if is_value_in_db $UID_DOMAIN_TABLE $UID_DO_DOMAIN_COLUMN $DOMAIN; then
 				minfo "$1 already in $UID_DOMAIN_TABLE table"
@@ -1457,7 +1478,7 @@ cr() {
 			$DBCMD "$QUERY"
 			if [ $? -ne 0 ] ; then
 				merr "cr - SQL Error"
-				exit 1 
+				exit 1
 			fi
 			minfo "execute '$0 cr reload' to synchronize cache and database"
 			;;
@@ -1490,7 +1511,7 @@ cr() {
 			$DBCMD "$QUERY"
 			if [ $? -ne 0 ] ; then
 				merr "cr - SQL Error"
-				exit 1 
+				exit 1
 			fi
 			minfo "execute '$0 cr reload' to synchronize cache and database"
 			;;
@@ -1662,12 +1683,12 @@ dispatcher() {
 			;;
 		reload)
 			require_ctlengine
-			$CTLCMD ds_reload
+			ctl_cmd_run ds_reload dispatcher.reload
 			;;
 
 		dump)
 			require_ctlengine
-			$CTLCMD ds_list
+			ctl_cmd_run ds_list dispatcher.list
 			;;
 
 		*)
@@ -1686,7 +1707,7 @@ dialog() {
 		show|list)
 			require_ctlengine
 			mecho "dialog memory records"
-			$CTLCMD dlg_list
+			ctl_cmd_run dlg_list dlg.list
 			;;
 		showdb)
 			require_dbengine
@@ -1778,7 +1799,6 @@ dialplan() {
 			fi
 
 			minfo "do not forget to do dialplan reload"
-			# $CTLCMD dp_reload
 			;;
 
 		rm)
@@ -1791,7 +1811,6 @@ dialplan() {
 			fi
 
 			minfo "do not forget to do dialplan reload"
-			# $CTLCMD dp_reload
 			;;
 
 		rmdpid)
@@ -1813,7 +1832,6 @@ dialplan() {
 			fi
 
 			minfo "do not forget to do dialplan reload"
-			# $CTLCMD dp_reload
 			;;
 
 		rmrule)
@@ -1836,11 +1854,10 @@ dialplan() {
 			fi
 
 			minfo "do not forget to do dialplan reload"
-			# $CTLCMD dp_reload
 			;;
 
 		reload)
-			$CTLCMD dp_reload
+			ctl_cmd_run dp_reload dp.reload
 			;;
 
 		*)
@@ -1863,7 +1880,7 @@ kamailio_start() {
 		minfo "PID file exists ($PID_FILE)! Kamailio already running?"
 		exit 1
 	fi
-	
+
 	if [ ! -x "$OSERBIN" ] ; then
 		echo
 		merr "Kamailio binaries not found at $OSERBIN"
@@ -1929,7 +1946,7 @@ rpid() {
 		show)
 			if [ $# -eq 2 ] ; then
 				set_user $2
-				is_user $2 
+				is_user $2
 				if [ $? -ne 0 ] ; then
 					merr "rpid - invalid user '$2'"
 					exit 1;
@@ -1946,21 +1963,21 @@ $CLAUSE ; "
 			;;
 
 		add|rm)
-		    MODE=$1;
+			MODE=$1;
 
 			if [ "$MODE" = "add" ] ; then
-			    ARG_NUM=3;
+				ARG_NUM=3;
 			else
-			    ARG_NUM=2;
+				ARG_NUM=2;
 			fi
-			
+
 			if [ $# -lt $ARG_NUM ] ; then
 				usage_rpid
 				exit 1
 			fi
 
 			set_user $2
-			is_user $2 
+			is_user $2
 			if [ $? -ne 0 ] ; then
 				merr "rpid - invalid user '$2'"
 				exit 1
@@ -1968,9 +1985,9 @@ $CLAUSE ; "
 			shift 2
 
 			if [ "$MODE" = "add" ] ; then
-			        RPID_VAL="'$1'";
+				RPID_VAL="'$1'";
 			else
-			        RPID_VAL=NULL;
+				RPID_VAL=NULL;
 			fi
 
 			QUERY="UPDATE $SUB_TABLE SET $RPID_COLUMN=$RPID_VAL \
@@ -2007,7 +2024,7 @@ speeddial() {
 	require_dbengine
 	shift
 
-	case $1 in 
+	case $1 in
 		list)
 			if [ $# -eq 2 ] ; then
 				# print speed-dials for user
@@ -2016,9 +2033,9 @@ speeddial() {
 					merr "speeddial - <$2> is not a valid AoR (user@domain)"
 					exit 1
 				fi
-				
+
 				set_user $2
-				
+
 				CLAUSE="WHERE $SD_USER_COLUMN='$OSERUSER' AND \
 $SD_DOMAIN_COLUMN='$OSERDOMAIN'"
 				mecho "Dumping speed-dials for user=<$2>"
@@ -2081,15 +2098,15 @@ $SD_DESC_COLUMN FROM $SD_TABLE;"
 				usage_speeddial
 				exit 1
 			fi
-			
+
 			check_aor "$2"
 			if [ "$?" -ne "0" ] ; then
 				merr "speeddial - $2 is not a valid AoR (user@domain)"
 				exit 1
 			fi
-			
+
 			set_user $2
-			
+
 			CLAUSE="WHERE $SD_SD_USER_COLUMN='$OSERUSER' AND \
 $SD_SD_DOMAIN_COLUMN='$OSERDOMAIN'"
 			QUERY="SELECT CONCAT($SD_USER_COLUMN,'@',$SD_DOMAIN_COLUMN) \
@@ -2097,8 +2114,8 @@ AS 'Owner', $SD_NEW_URI_COLUMN AS 'New URI', $SD_DESC_COLUMN FROM \
 $SD_TABLE $CLAUSE ; "
 			mecho "Details for speeddial <$2>"
 			$DBROCMD "$QUERY"
-			# | $AWK 'BEGIN {line=0;} /^\+/ { next } 
-			# { 
+			# | $AWK 'BEGIN {line=0;} /^\+/ { next }
+			# {
 			#	  if(line==0) print "##  SIP-ID    \tNew-URI   \tDescritpion\n";
 			#	  else {
 			#		  ORS_BAK=ORS;usage_kamailio_monitor() {
@@ -2133,18 +2150,18 @@ $SD_TABLE $CLAUSE ; "
 				merr "speeddial - $2 is not a valid AoR (user@domain)"
 				exit 1
 			fi
-			
+
 			check_sipaor "$3"
 			if [ "$?" -ne "0" ] ; then
 				merr "speeddial - $3 is not a valid SIP AoR (sip:user@domain)"
 				exit 1
 			fi
-			
+
 			set_user $1
 			TMP_OSERUSER=$OSERUSER
 			TMP_OSERDOMAIN=$OSERDOMAIN
 			set_user $2
-			
+
 			QUERY="INSERT INTO $SD_TABLE ($SD_USER_COLUMN,$SD_DOMAIN_COLUMN,\
 $SD_SD_USER_COLUMN,$SD_SD_DOMAIN_COLUMN,$SD_NEW_URI_COLUMN,$SD_DESC_COLUMN) \
 VALUES ('$TMP_OSERUSER','$TMP_OSERDOMAIN','$OSERUSER','$OSERDOMAIN','$3','$4');"
@@ -2163,15 +2180,15 @@ VALUES ('$TMP_OSERUSER','$TMP_OSERDOMAIN','$OSERUSER','$OSERDOMAIN','$3','$4');"
 				usage_speeddial
 				exit 1
 			fi
-			
+
 			shift
-			
+
 			check_aor "$1"
 			if [ "$?" -ne "0" ] ; then
 				merr "speeddial - $1 is not a valid AoR (user@domain)"
 				exit 1
 			fi
-			
+
 			check_aor "$2"
 			if [ "$?" -ne "0" ] ; then
 				merr "speeddial - $2 is not a valid AoR (user@domain)"
@@ -2192,16 +2209,16 @@ $SD_SD_DOMAIN_COLUMN='$OSERDOMAIN'"
 				merr "speeddial - SQL Error"
 				exit 1
 			fi
-			
+
 			mecho "ok - spedd dial deleted"
 			echo
 
 			;;
-			
+
 		help)
 			usage_speeddial
 			;;
-			
+
 		*)
 			merr "speeddial - unknown command"
 			usage_speeddial
@@ -2222,7 +2239,7 @@ subscriber() {
 	fi
 
 	require_dbengine
-	
+
 	case $1 in
 		add)
 			if [ $# -ne 3 ] ; then
@@ -2320,9 +2337,9 @@ WHERE $SUBSCRIBER_COLUMN='$OSERUSER' and $REALM_COLUMN='$OSERDOMAIN';"
 			fi
 
 			require_ctlengine
-			shift 
+			shift
 
-			is_user $1 
+			is_user $1
 			if [ $? -ne 0 ] ; then
 				merr "non-existent user '$1'"
 				exit 1
@@ -2432,18 +2449,18 @@ usrloc() {
 	fi
 	shift
 
-	case $1 in 
+	case $1 in
 		show)
 			if [ $# -eq 2 ] ; then
 				if [ "$2" = "--brief" ] ; then
-					$CTLCMD ul_dump brief
+					ctl_cmd_run ul_dump ul.dump brief
 				else
 					set_user $2
-					$CTLCMD ul_show_contact \
+					ctl_cmd_run ul_show_contact ul.lookup \
 						$USRLOC_TABLE "$OSERUSER@$OSERDOMAIN"
 				fi
 			elif [ $# -eq 1 ] ; then
-				$CTLCMD ul_dump
+				ctl_cmd_run ul_dump ul.dump
 			else
 				merr "wrong number of params"
 				usage_usrloc
@@ -2474,7 +2491,7 @@ usrloc() {
 			fi
 			shift
 			check_uri "$2"
-				
+
 			if [ "$?" -ne "0" ] ; then
 				merr "$2 is not a valid URI"
 				exit 1
@@ -2482,7 +2499,7 @@ usrloc() {
 
 			set_user $1
 			if [ "$CHECK_SUB" -ne 0 ] ; then
-				is_user $1 
+				is_user $1
 				if [ $? -eq 0 ] ; then
 					merr "overlap of alias with an existing subscriber name"
 					exit 1;
@@ -2503,7 +2520,7 @@ usrloc() {
 				DEFAULT_Q="1.0"
 			fi
 
-			$CTLCMD ul_add "$USRLOC_TABLE" "$OSERUSER@$OSERDOMAIN" "$2" \
+			ctl_cmd_run ul_add ul.add "$USRLOC_TABLE" "$OSERUSER@$OSERDOMAIN" "$2" \
 "$UL_EXPIRES" "$DEFAULT_Q" "$UL_PATH" "$UL_FLAGS" "$BR_FLAGS" "$ALL_METHODS"
 			exit $?
 			;;
@@ -2511,7 +2528,7 @@ usrloc() {
 			if [ $# -eq 2 ] ; then
 				shift
 				set_user $1
-				$CTLCMD ul_rm $USRLOC_TABLE "$OSERUSER@$OSERDOMAIN"
+				ctl_cmd_run ul_rm ul.rm $USRLOC_TABLE "$OSERUSER@$OSERDOMAIN"
 
 			elif [ $# -eq 3 ] ; then
 				shift
@@ -2522,7 +2539,7 @@ usrloc() {
 					exit 1
 				fi
 
-				$CTLCMD ul_rm_contact $USRLOC_TABLE "$OSERUSER@$OSERDOMAIN" "$2"
+				ctl_cmd_run ul_rm_contact ul.rm_contact $USRLOC_TABLE "$OSERUSER@$OSERDOMAIN" "$2"
 
 			else
 				merr "wrong number of params"
@@ -2769,13 +2786,13 @@ case $1 in
 	alias_db|aliasdb)
 		alias_db "$@"
 		;;
-		
+
 	avp)
 		avpops "$@"
 		;;
 
 	cisco_restart)
-		if [ "$#" -ne 2 ] ; then	
+		if [ "$#" -ne 2 ] ; then
 			usage_cisco_restart
 			exit 1
 		fi
@@ -2879,20 +2896,20 @@ case $1 in
 
 	ps)
 		require_ctlengine
-		$CTLCMD ps
+		ctl_cmd_run ps core.psx
 		;;
 
 	uptime)
 		require_ctlengine
-		$CTLCMD uptime
+		ctl_cmd_run uptime core.uptime
 		;;
 
 	stats)
 		require_ctlengine
 		if [ "$#" -eq 1 ] ; then
-			$CTLCMD get_statistics all
+			ctl_cmd_run get_statistics stats.get_statistics all
 		else
-			$CTLCMD get_statistics "${2}:"
+			ctl_cmd_run get_statistics stats.get_statistics "${2}:"
 		fi
 		;;
 
@@ -2901,7 +2918,7 @@ case $1 in
 		sleep 2
 		kamailio_start
 		;;
-	
+
 	rpid)
 		rpid "$@"
 		;;
@@ -2931,7 +2948,7 @@ case $1 in
 	version)
 		echo  "$0 $VERSION"
 		;;
-		
+
 	*)
 		extcmd "$@"